242. 有效的字母异位词 - 力扣(LeetCode)
题目描述
代码解决以及思路
这个方法的时间复杂度为O(N),其中N是字符串的长度,空间复杂度为O(1)(因为辅助数组的大小是固定的26)。
class Solution {
public:bool isAnagram(string s, string t) {// 创建一个大小为26的整数数组,用于存储每个字母的出现次数int hash[26] = {0};// 遍历字符串s,将每个字母的出现次数记录在hash数组中for (int i = 0; i < s.size(); i++) {// 并不需要记住字符'a'的ASCII值,只需要求出一个相对数值即可hash[s[i] - 'a']++;}// 遍历字符串t,将每个字母的出现次数从hash数组中减去for (int i = 0; i < t.size(); i++) {hash[t[i] - 'a']--;}// 检查hash数组,如果有任何一个位置不为0,说明两个字符串不是字母异位词for (int i = 0; i < 26; i++) {if (hash[i] != 0) {return false; // 发现字母计数不匹配,返回false}}// 所有字母计数都为0,说明两个字符串是字母异位词,返回truereturn true;}
};
isAnagram
函数接受两个字符串s
和t
作为参数,并返回一个布尔值,指示这两个字符串是否为字母异位词。
函数使用一个长度为26的整型数组hash
来存储每个字符(假设为小写字母)的出现次数。数组的每个索引对应于一个字母(例如,索引0对应于’a’,索引1对应于’b’,依此类推)。
首先,遍历字符串s
,对于每个字符,将其ASCII码值减去’a’的ASCII码值,得到一个相对数值,然后增加数组hash
中对应索引的计数。
接着,遍历字符串t
,对于每个字符,执行相同的操作,但减少数组hash
中对应索引的计数。
最后,遍历数组hash
,检查所有计数是否为零。如果所有计数都为零,则说明两个字符串包含相同的字符,且每个字符的出现次数相同,因此它们是字母异位词,函数返回true
。如果任何计数不为零,则说明两个字符串不是字母异位词,函数返回false
。