leetcode 205-Isomorphic Strings

最简单的思想,就是穷举比较:

 if(s.size()!=t.size())
            return false;
        if(s.size()==0)
            return true;
        for(int i=0;i<s.size()-1;i++)
        {
            for(int j=i+1;j<s.size();j++)
            {
                if(s[i]==s[j]||t[i]==t[j])
                    if(t[i]!=t[j]||s[i]!=s[j])
                        return false;
            }
        }
        return true;

还好能通过,但时间复杂度太高

相当于要比较一个对应位置的字符出现的次数是不是相同:

使用hashmap 来记录字符出现的个数:

         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]]++;
            m2[t[i]]++;
        }
        return true;

  但是出现, abb, aba 这种情况会判为true, 因为出现的次数是对的。

考虑这里要比较出现的次数还要比较出现的位置:

         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;

  

原文地址:https://www.cnblogs.com/fanhaha/p/7264159.html