关于哈希表:代码随想录:哈希表理论基础
一、题目描述
二、思路
分两步走:计数s与t字符串中各字母数目、判断各字母数目是否相同:
-
计数s与t字符串中各字母数目
利用哈希表记录每个字母的数目,因为题目中涉及的均为小写字母,所以设置的计数数组(哈希表)仅需要设置长度为26。将小写字母a映射为计数数组中下标为0,因此小写字母z映射为计数数组中下标为25,而后遍历其中一个字符串计数。
-
判断各字母数目是否相同
遍历另外的字符串去对计数数组做减法。遍历完成后,判断数组中各个元素是否都为零:若是,则返回ture;若不是,则返回false。
-
总过程如图:
三、解题过程
-
初始化计数数组record
int record[26] = { 0 };
-
对s字符串中字符进行计数
for(i = 0; s[i] != '\0'; i ++) record[s[i] - 'a'] ++;
-
遍历t字符串并对计数数组做减法
for(i = 0; t[i] != '\0'; i ++) record[t[i] - 'a'] --;
-
判断计数数组内元素是否都为零,是则输出true,否则输出false
for(i = 0; i < 26; i ++) {
if(record[i] != 0) return false;
}
return true;
四、代码
bool isAnagram(char * s, char * t){
int record[26] = { 0 };
int i = 0;
for(i = 0; s[i] != '\0'; i ++) record[s[i] - 'a'] ++;
for(i = 0; t[i] != '\0'; i ++) record[t[i] - 'a'] --;
for(i = 0; i < 26; i ++) {
if(record[i] != 0) return false;
}
return true;
}