来源: https://leetcode.com/problems/isomorphic-strings/
给定两个字符串s和t,判断他们是否模式相同。
两个字符串的模式相同的意思是s的字符可以经过替换变成t。
所有出现的字符,必须被另外一个字符替换,保持原有的顺序。两个不同的字符,不能用同一个字符替换,但是一个字符可以用自己本身替换。
<strong>Input:</strong> <strong><em>s</em></strong> = <code>"egg", </code><strong><em>t = </em></strong><code>"add"</code> <strong>Output:</strong> true
<strong>Input:</strong> <strong><em>s</em></strong> = <code>"foo", </code><strong><em>t = </em></strong><code>"bar"</code> <strong>Output:</strong> false
<strong>Input:</strong> <strong><em>s</em></strong> = <code>"paper", </code><strong><em>t = </em></strong><code>"title"</code> <strong>Output:</strong> true
注意:
你可以假定s和t的长度相等。
直接看起来这个比较比较麻烦。一种思路就是在s遇到一个不重复的字符就替换成t对应位置的字符,依次类推,如果最后替换的结果和t完全相等,那么就是同模式的字符。这个思路写起来有点麻烦。
我的思路是用hashmap来存储每个字符串第一个不重复字符出现的位置,这样就可以把字符串给变成一个数字数组,这样就得到了字符串的模式,如果两个字符串的模式相同,那么两个字符串就是同模式字符串。
例如例1的egg,按照这个思路,就会变成[0,1,1],而add也会变成[0,1,1],所以他们是同模式字符串。
例2的foo模式也是[0,1,1],但是bar是[0,1,2],所以他们不是同模式字符串。
所以代码分为两个部分,第一个部分把字符串转换成模式数字数组。
第二个部分比较两个模式数组是否相同:
Github: https://github.com/tinyfool/leetcode/tree/master/src/p0205
本题属于哈希表类题目,想了解更多关于哈希表的题目,可以参看哈希表专题。