#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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2019-11-28 10:07  xyy999  阅读(151)  评论(0编辑  收藏  举报