给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 请用c语言回答
时间: 2024-10-07 12:02:38 浏览: 30
在C语言中,你可以通过创建一个哈希表(字典数组或频率计数数组)来解决这个问题。以下是简单的步骤:
```c
#include <stdbool.h>
#include <string.h>
bool isAnagram(char *s, char *t) {
// 首先检查字符串长度是否相等
if (strlen(s) != strlen(t)) {
return false;
}
// 定义一个大小等于26的布尔型数组,用于存储字符频率
int freq[26] = {0};
// 计算s中的字符频率
for (int i = 0; s[i] != '\0'; i++) {
freq[s[i] - 'a']++;
}
// 检查t中的字符频率
for (int i = 0; t[i] != '\0'; i++) {
freq[t[i] - 'a']--;
if (freq[t[i] - 'a'] < 0) {
return false;
}
}
// 如果所有字符频率都为0,说明它们是字母异位词
return true;
}
```
这个函数首先检查两个字符串的长度,如果长度不等则直接返回false。然后计算第一个字符串`s`中每个字符的出现频率,并在遍历第二个字符串`t`时,对相应的频率减一。如果在遍历过程中发现某个字符的频率小于0,说明`t`中有比`s`更多的该字符,所以不是异位词。最后,如果所有字符的频率都变为0,那么`s`和`t`就是字母异位词。
阅读全文