• 读懂题目意思

首先自己都没读懂题目意思,理解了一会儿!

 :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 };