1.有效字母异位词
有效字母异位词指的是两个字符串组成的数字或者字符是相同的,顺序无所谓,但是内容一定要是相同的,例如s="abcd",t="bdca",则这两个字符串是有效字符异位词,但是如果s="abcd",t="bdcsa",则这两个字符不是有效字符异位词。
2.第一种解法:用哈希数组进行求解
思路:定义一个数组,将其中一个字符串映射到数组中,用这个数组来记录字符串中字母出现的次数,
1.遍历字符串s,将字符串的作为数组的下标,记录出现的次数
2.遍历字符串t,将字符串的作为数组的下标,进行减减
3.最后遍历数组,只要数组中的所有值都为0,则为有效字母异位词。
bool isAnagram(string s, string t){
int arr=[26]={0};//进行初始化数组
for(int i=0;i<s.size();i++){
arr[s[i]-'a']++; //会自动转换为数值,将字符串作为数组的下标,记录出现的次数
}
for(int i=0;i<t.size();i++){
arr[t[i]-'a']++; //同样也会自动转换为数组,将字符串作为数组的下标,一旦出现就减减
}
//只要最后数组arr中的数值都为0的话,那么两个字符串就是有效字母异位词
for(int i=0;i<arr.size();i++){
if(arr[i]!=0){
return false;
}
}
return true;
}
2.第一种解法:对字符串进行排序,直接比较即可(较为简单)
解题思路:
1.因为不知道两个字符串的长度,长度不同也不是有效字母异位词,因此要先进行长度的判断
2.对两个字符串进行排序
3.因为前端已经经过长度的判断,所以这里的长度一定是一样的,所有遍历的时候要以哪个字符串位标准都是可以的,其次对排好序的字符串进行一一比较即可
bool isAnagram(string s, string t){
if(s.size()!=t.size())return false;
sort(s.begin(),s.end())
sort(t.begin(),t.end())
for(int i=0;i<s.size();i++){
if(s[i]!=t[i]){
return false;
}
}
return true;
}