最简单的思想,就是穷举比较:
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;