초판
/*class Solution {
public:
bool isIsomorphic(string s, string t) {
unordered_map<char,int> m1,m2;
for(int i = 0;i < s.size();i++){
m1[s[i]] += (i + 1);
//对每一个字母出现的位置求和,两个字母在相同的地方出现的时候每次的和一致,
//如果是最后的和一致不太能判断
//一定是第几个位置,不是下标的和,否则会出问题。
m2[t[i]] += (i + 1);
if(m1[s[i]] != m2[t[i]])
return false;
}
return true;
}
"abbaa"
"cddcd"
};*/
class Solution {
public:
bool isIsomorphic(string s, string t) {
unordered_map<char, int> un_mp1, un_mp2;
for (unsigned i = 0; i < s.size(); ++i) {
un_mp1[s[i]] += 1+i;
un_mp2[t[i]] += 1+i;
//知道为啥是i+1了,初始化的时候大家都是0,如果只用i的话,可能没有。
if (un_mp1[s[i]] != un_mp2[t[i]] ) return false;
}
return true;
}
};
다른 위치에 나타나더라도 가능한 위치의 합은 동일합니다.
두번째 버전
class Solution {
public:
bool isIsomorphic(string s, string t) {
vector<int> spos(256,0),tpos(256,0);
for(int i = 0;i < s.size();i++){
if(spos[s[i]] != tpos[t[i]])
return false;
spos[s[i]] = tpos[t[i]] = i+1;
}
return true;
}
};