- 读懂题目意思
首先自己都没读懂题目意思,理解了一会儿!
:s和t字符串的字母组成是一样的,相同的种类和相同的数量,否则就返回错误
- 思路
第一种:利用sort函数进行排序,然后判断s和t是否相同
第二种:建立哈希表,s字符串是根据键值存放数量,t字符串根据键值是减小数量,利用迭代器判断所有的key对应的值是否为零
- 代码
1 //想用哈希表,所以用unordered_map,底层是哈希表实现 2 //用到iterator迭代判断 3 //第一次犯错,没有考虑s和t的长度是否相等,若相等则进行下一步,不相等直接输出false 4 class Solution { 5 public: 6 bool isAnagram(string s, string t) { 7 /*unordered_map<char,int>vocabulary; 8 if(s.size()!=t.size()) return false; 9 for(int i=0;i<s.size();i++){ 10 ++vocabulary[s[i]]; 11 --vocabulary[t[i]]; 12 } 13 unordered_map<char,int>::iterator it; 14 for(it=vocabulary.begin();it!=vocabulary.end();it++){ 15 if(it->second!=0)return false; 16 } 17 return true;*/ 18 19 } 20 };
1 //直接对s和t进行排序,然后判断 2 //此方法时间复杂度和空间复杂度都高 3 class Solution { 4 public: 5 bool isAnagram(string s, string t) { 6 sort(s.begin(),s.end()); 7 sort(t.begin(),t.end()); 8 if(s==t)return true; 9 return false; 10 11 } 12 };