LeetCode242. 有效的字母异位词

题目 

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

代码

法一、排序后判断是否相等,因为题目中说了字符串都为26个小写字母。

t 是 s 的异位词等价于两个字符串排序后相等。以后要学会这个技巧

1 class Solution {
2 public:
3     bool isAnagram(string s, string t) {
4         if(s.length()!=t.length()) return false;
5         sort(s.begin(),s.end());
6         sort(t.begin(),t.end());
7         return s == t;
8     }
9 };

法二、哈希表。数组就是一个简单的哈希表

 1 class Solution {
 2 public:
 3     bool isAnagram(string s, string t) {
 4         if(s.length()!=t.length()) return false;
 5         int ans[26];
 6         for(int i = 0;i < 26;i++) ans[i] = 0;
 7         for(int i = 0;i < s.length();i++) ans[s[i] - 'a']++;
 8         for(int i = 0;i < t.length();i++) ans[t[i] - 'a']--;
 9         
10         for(int i = 0;i < 26;i++){
11             if(ans[i] != 0) return false;
12         }
13         return true;
14     }
15 };

这里因为为26个小写字母,所以开的数组大小为26,用该数组记录每个字母

的次数。

这里要学会技巧如何将一个字母映射到数组7-8行,s[i] - 'a' ,这样索引0代表

字母a。

这样时间复杂度为O(n),空间复杂度为O(1),数组空间大小固定。

 

上一篇:华为云企业级Redis:助力VMALL打造先进特征平台


下一篇:近数据处理(NDP)——GaussDB(for MySQL)性能提升的秘密