242.有效的字母异位词
242. 有效的字母异位词 - 力扣(LeetCode)
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true
示例 2: 输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。
思路
错误思路:本题不可以对两个字符串中的字符asc码分别相加,判断是否相等来做。因为字符串中的字符不相等,asc码相加的结果也可能是相同的。
正确思路:构建hash表,构建hash function,一个字符串写入数据,另一个字符串删除数据,判断hash表中的元素是否为0。(前提是hash初始化,存储的所有元素都为0)
本题所需要构造的hash表较小,且数据范围也小,因此使用数组来构建hash表。
c语言代码实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   |  bool isAnagram(char* s, char* t) {     int i ;     int hash[26];     memset(hash,0,sizeof(hash));     for(i=0;i<strlen(s);i++){         hash[ s[i] - 'a']++;     }     for(i=0;i<strlen(t);i++){         hash[ t[i] - 'a']--;     }     for(i= 0;i<26;i++){         if(hash[i] != 0)         return false;     }     return true; }
 
  | 
 
c++实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   | class Solution { public:     bool isAnagram(string s, string t) {         int record[26] = {0};         for (int i = 0; i < s.size(); i++) {                          record[s[i] - 'a']++;         }         for (int i = 0; i < t.size(); i++) {             record[t[i] - 'a']--;         }         for (int i = 0; i < 26; i++) {             if (record[i] != 0) {                                  return false;             }         }                  return true;     } };
  |