2022-4-20 Leetcode205. 동형 문자열

여기에 이미지 설명 삽입
여기에 이미지 설명 삽입
초판
여기에 이미지 설명 삽입

/*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;
    }
};

추천

출처blog.csdn.net/weixin_51187533/article/details/124293881