tags:hash table
两种情况下返回false:
1)s中一个字符对应t中两个不同的字符。
2)t中一个字符对应s中两个不同的字符。
其他情况下都返回true。
建两个hash表,m1、m2。
代码:
class Solution {
public:
bool isIsomorphic(string s, string t) {
int size = s.size();
int m1[128] = {0};
int m2[128] = {0};
for (int i = 0; i < size; ++i){
if ( m1[s[i]] != 0 && m1[s[i]]!= t[i]) return false;
if ( m2[t[i]] != 0 && m2[t[i]]!= s[i]) return false;
m1[s[i]] = t[i];
m2[t[i]] = s[i];
}
return true;
}
};
网上还有种更简洁的,m1、m2保存字符的位置。
返回false的条件是:
1)s[i]在前面出现的位置不等于t[i]在前面出现的位置(包括t[i]在前面没出现的情况:t[i]=0)。
class Solution {
public:
bool isIsomorphic(string s, string t) {
int m1[256] = {0}, m2[256] = {0}, n = s.size();
for (int i = 0; i < n; ++i) {
if (m1[s[i]] != m2[t[i]]) return false;//
m1[s[i]] = i + 1;
m2[t[i]] = i + 1;
}
return true;
}
};