Is Isomorphic

Is Isomorphic

题目描述:

给定两个字符串,判断这两个字符对应位置是否有一一对应关系。我们认为egg和add是一一对应的关系;foo和bar就不是。

例子:

具体描述看LeetCode205

解题思路:

我们利用哈希表来保存字符串之间的对应关系,在遍历过程中判断字符是否已经出现在哈希表中,如果和已知的对应关系不匹配即返回false。需要注意的是字符串如果长度不一致即直接返回false;另外一一对应的关系是相互的,所以我们需要判断(t,s)和(s,t)

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
bool isIsomorphic(string s, string t) {
return judge(s, t) && judge(t, s);
}
bool judge(string s, string t){
map<char, char> hash;
if (s.size() != t.size())
return false;
//如果两个字符串长度不相等直接返回false
for (int i = 0; i < s.size(); i++){
if (hash.find(s[i]) == hash.end()){
hash.insert({s[i], t[i]});
//保存对应的字符对应关系
}else if (hash[s[i]] != t[i]){
return false;
}
}
return true;
}
};