题目
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
注意:若 s
和 t
中每个字符出现的次数都相同,则称 s
和 t
互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母
解答
- 暴力解法,用C++实现
主要思路:首先对两个字符串的长度进行比较,若不一致则返回false,接下来,因为字符串的字母共有26个,因此遍历统计字符串中每个字母的个数,并用一个大小为26的对应数组进行存储,最后遍历对比两个字符串对应的统计个数的数组是否一致,对比的结果即为最终结果,代码如下:
class Solution {
public:
bool isAnagram(string s, string t) {
//对每个字符串的字母个数统计数组的初始化
int arr_s[26] = {0};
int arr_t[26] = {0};
//计算两个字符串的长度,如果长度不同,那么一定不是字母异位词
int len_s = s.length();
int len_t = t.length();
if(len_s != len_t)
{
return false;
}
//在遍历中确定每个字母统计的下标,并且+1
for(int i = 0; i < len_s; i++){
int index_s = (int)(s[i] - 'a');
int index_t = (int)(t[i] - 'a');
arr_s[index_s] = arr_s[index_s] + 1;
arr_t[index_t] = arr_t[index_t] + 1;
}
//对比两个字符串的字母的种类和个数是否一致
for(int i = 0; i < 26; i++){
if(arr_s[i] != arr_t[i])
return false;
}
//最终返回结果
return true;
}
};