目录
题目:
给定两个字符串 *s*
和 *t*
,编写一个函数来判断 *t*
是否是 *s*
的字母异位词。
注意:若 *s*
和 *t*
中每个字符出现的次数都相同,则称 *s*
和 *t*
互为字母异位词。
开始思路:
判断字母长度,不相等直接返回false,相等再将两个字符串排序之后比较。
bool isAnagram(char* s, char* t) {
int k1=strlen(s);
int k2=strlen(t);
if(k1!=k2)
{
return false;
}
for(int i=0;i<k1;i++)
{
for(int j=0;j<i;j++)
{
if(s[i]<s[j])
{
s[i]=s[i]+s[j];
s[j]=s[i]-s[j];
s[i]=s[i]-s[j];
}
if(t[i]<t[j])
{
t[i]=t[i]+t[j];
t[j]=t[i]-t[j];
t[i]=t[i]-t[j];
}
}
}
int k3=0;
for(int i=0;i<k1;i++)
{
if(t[i]==s[i])
{
k3++;
}
}
if(k3!=k1)
{
return false;
}
else
{
return true;
}
}
但是超时了,比较麻烦了。
最后思路:
看了评论区大佬的java思路,豁然开朗,判断字母长度,不相等直接返回false,相等再建一个数组存放26位字母的个数,循环遍历,一个加一个减,(就是如果s的值为a,数组[0]加一,t的值为a,数组[0]减一,以此类推)最后遍历该数组,如果该数组内元素各值存在非零数,直接返回false,否则跳出循环最终结果返回true.
最终代码:
bool isAnagram(char* s, char* t) {
int k1=strlen(s);
int k2=strlen(t);
if(k1!=k2)
{
return false;
}
int alpha[26]={0};
for(int i=0;i<k1;i++)
{
alpha[s[i]-'a']++;
alpha[t[i]-'a']--;
}
for(int i=0;i<26;i++)
{
if(alpha[i]!=0)
{
return false;
}
}
return true;
}
成功啦
嘿嘿嘿
再接再励吧!!!!!!!
脑袋空空。
如果有更好的方案,请赐教,感谢!
标签:char,false,int,异位,字母,力扣,k2,242,strlen From: https://blog.csdn.net/m0_65146517/article/details/140226234