#leetCode刷题纪实 Day28
https://leetcode-cn.com/problems/valid-anagram/
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
小菜鸡的尝试:
最开始的思路很简单:就是用sort函数对字符串进行排序,再以复杂度为O(n)的遍历方式进行比较。当然也要考虑两字符串不等的情况。
1 class Solution { 2 public: 3 bool isAnagram(string s, string t) { 4 sort(s.begin(), s.end()); 5 sort(t.begin(), t.end()); 6 int curr = 0; 7 while (s[curr] && t[curr]) { 8 if(s[curr] != t[curr]) return false; 9 curr ++; 10 } 11 return !(s[curr] || t[curr]); 12 } 13 };
但跑出来效果一般
膜拜大佬代码:
这是同样的方法更优雅的写法:
1 class Solution { 2 public: 3 bool isAnagram(string s, string t) { 4 if (s.size() != t.size()) { 5 return false; 6 } 7 sort(s.begin(), s.end()); 8 sort(t.begin(), t.end()); 9 return s == t; 10 } 11 };
更优的办法是使用哈希表
1 class Solution { 2 public: 3 bool isAnagram(string s, string t) { 4 if (s.size() != t.size()) { 5 return false; 6 } 7 unordered_map<int, int> umap; 8 for (char ch : s) { 9 ++umap[ch]; 10 } 11 for (char ch : t) { 12 if (umap[ch] > 0) { 13 --umap[ch]; 14 } else { 15 return false; 16 } 17 } 18 return true; 19 } 20 };
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。