一开始尝试用map来写,发现最后的时空利用率都不尽人意。
class Solution { public: bool isAnagram(string s, string t) { if(s.size()!=t.size())return false; unordered_map<int,int> tofs; for(int i=0;i<s.size();i++) { tofs[s[i]]++; } for(int i=0;i<t.size();i++) { tofs[t[i]]--; } bool flag=true; for(int i=0;i<s.size();i++) { if(tofs[s[i]]!=0)flag=false; } if(flag==true)return true; else return false; } };
后来发现题目的“默认只包含小写字母”,所以完全可以用数组来写。
class Solution { public: bool isAnagram(string s, string t) { if(s.size()!=t.size())return false; int tofs[30]={0}; for(auto c:s) { tofs[c-'a']++; } for(auto c:t) { tofs[c-'a']--; } bool flag=true; for(int i=0;i<30;i++) { if(tofs[i]!=0)flag=false; } return flag; } };
不过发现虽然写起来简洁了,但是效率也没有怎么提高。。ORZ