一、leecode题目
给定两个字符串 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 仅包含小写字母
二、解题思路
字符串由26字母组成,两个字符串比较,可以用两个int型长度为26的数组去记录各个字母出现的次数,两个字符串长度相等时,进行一次循环记录字母的出现次数,,不相等时,肯定不是字母异位词,直接返回0。
三、虚机模拟测试代码
(1)测试版本1
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
void main()
{
bool isAnagram(char * s, char * t);
char s[] = "rat";
char t[] = "car";
bool flag;
flag = isAnagram(s, t);
printf("flag : %d\n",flag);
}
bool isAnagram(char * s, char * t)
{
bool JudgeArrayEqual(int *sa , int *ta);
int SArray[26] = {0};
int TArray[26] = {0};
size_t SStrLen = strlen(s);
size_t TStrLen = strlen(t);
if(SStrLen != TStrLen)
{
return 0;
}
size_t i;
for(i=0;i<SStrLen;i++)
{
switch(s[i])
{
case 'a' : SArray[0]++; break;
case 'b' : SArray[1]++; break;
case 'c' : SArray[2]++; break;
case 'd' : SArray[3]++; break;
case 'e' : SArray[4]++; break;
case 'f' : SArray[5]++; break;
case 'g' : SArray[6]++; break;
case 'h' : SArray[7]++; break;
case 'i' : SArray[8]++; break;
case 'j' : SArray[9]++; break;
case 'k' : SArray[10]++; break;
case 'l' : SArray[11]++; break;
case 'm' : SArray[12]++; break;
case 'n' : SArray[13]++; break;
case 'o' : SArray[14]++; break;
case 'p' : SArray[15]++; break;
case 'q' : SArray[16]++; break;
case 'r' : SArray[17]++; break;
case 's' : SArray[18]++; break;
case 't' : SArray[19]++; break;
case 'u' : SArray[20]++; break;
case 'v' : SArray[21]++; break;
case 'w' : SArray[22]++; break;
case 'x' : SArray[23]++; break;
case 'y' : SArray[24]++; break;
case 'z' : SArray[25]++; break;
}
switch(t[i])
{
case 'a' : TArray[0]++; break;
case 'b' : TArray[1]++; break;
case 'c' : TArray[2]++; break;
case 'd' : TArray[3]++; break;
case 'e' : TArray[4]++; break;
case 'f' : TArray[5]++; break;
case 'g' : TArray[6]++; break;
case 'h' : TArray[7]++; break;
case 'i' : TArray[8]++; break;
case 'j' : TArray[9]++; break;
case 'k' : TArray[10]++; break;
case 'l' : TArray[11]++; break;
case 'm' : TArray[12]++; break;
case 'n' : TArray[13]++; break;
case 'o' : TArray[14]++; break;
case 'p' : TArray[15]++; break;
case 'q' : TArray[16]++; break;
case 'r' : TArray[17]++; break;
case 's' : TArray[18]++; break;
case 't' : TArray[19]++; break;
case 'u' : TArray[20]++; break;
case 'v' : TArray[21]++; break;
case 'w' : TArray[22]++; break;
case 'x' : TArray[23]++; break;
case 'y' : TArray[24]++; break;
case 'z' : TArray[25]++; break;
}
}
return JudgeArrayEqual(SArray , TArray);
}
bool JudgeArrayEqual(int *sa , int *ta)
{
int i;
for(i=0;i<26;i++)
{
if(sa[i] != ta[i])
{
return 0;
}
}
return 1;
}
(2)测试版本2
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
void main()
{
bool isAnagram(char * s, char * t);
char s[] = "rat";
char t[] = "car";
bool flag;
flag = isAnagram(s, t);
printf("flag : %d\n",flag);
}
bool isAnagram(char * s, char * t)
{
bool JudgeArrayEqual(int *sa , int *ta);
int SArray[26] = {0};
int TArray[26] = {0};
size_t SStrLen = strlen(s);
size_t TStrLen = strlen(t);
if(SStrLen != TStrLen)
{
return 0;
}
size_t i;
int tmp,tmp1;
for(i=0;i<SStrLen;i++)
{
tmp = s[i] - 'a';
SArray[tmp]++;
tmp1 = t[i] - 'a';
TArray[tmp1]++;
}
return JudgeArrayEqual(SArray , TArray);
}
bool JudgeArrayEqual(int *sa , int *ta)
{
int i;
for(i=0;i<26;i++)
{
if(sa[i] != ta[i])
{
return 0;
}
}
return 1;
}
四、虚机模拟测试截图
五、leecode提交源码
(1)提交版本1
bool isAnagram(char * s, char * t)
{
bool JudgeArrayEqual(int *sa , int *ta);
int SArray[26] = {0};
int TArray[26] = {0};
size_t SStrLen = strlen(s);
size_t TStrLen = strlen(t);
if(SStrLen != TStrLen)
{
return 0;
}
size_t i;
for(i=0;i<SStrLen;i++)
{
switch(s[i])
{
case 'a' : SArray[0]++; break;
case 'b' : SArray[1]++; break;
case 'c' : SArray[2]++; break;
case 'd' : SArray[3]++; break;
case 'e' : SArray[4]++; break;
case 'f' : SArray[5]++; break;
case 'g' : SArray[6]++; break;
case 'h' : SArray[7]++; break;
case 'i' : SArray[8]++; break;
case 'j' : SArray[9]++; break;
case 'k' : SArray[10]++; break;
case 'l' : SArray[11]++; break;
case 'm' : SArray[12]++; break;
case 'n' : SArray[13]++; break;
case 'o' : SArray[14]++; break;
case 'p' : SArray[15]++; break;
case 'q' : SArray[16]++; break;
case 'r' : SArray[17]++; break;
case 's' : SArray[18]++; break;
case 't' : SArray[19]++; break;
case 'u' : SArray[20]++; break;
case 'v' : SArray[21]++; break;
case 'w' : SArray[22]++; break;
case 'x' : SArray[23]++; break;
case 'y' : SArray[24]++; break;
case 'z' : SArray[25]++; break;
}
switch(t[i])
{
case 'a' : TArray[0]++; break;
case 'b' : TArray[1]++; break;
case 'c' : TArray[2]++; break;
case 'd' : TArray[3]++; break;
case 'e' : TArray[4]++; break;
case 'f' : TArray[5]++; break;
case 'g' : TArray[6]++; break;
case 'h' : TArray[7]++; break;
case 'i' : TArray[8]++; break;
case 'j' : TArray[9]++; break;
case 'k' : TArray[10]++; break;
case 'l' : TArray[11]++; break;
case 'm' : TArray[12]++; break;
case 'n' : TArray[13]++; break;
case 'o' : TArray[14]++; break;
case 'p' : TArray[15]++; break;
case 'q' : TArray[16]++; break;
case 'r' : TArray[17]++; break;
case 's' : TArray[18]++; break;
case 't' : TArray[19]++; break;
case 'u' : TArray[20]++; break;
case 'v' : TArray[21]++; break;
case 'w' : TArray[22]++; break;
case 'x' : TArray[23]++; break;
case 'y' : TArray[24]++; break;
case 'z' : TArray[25]++; break;
}
}
return JudgeArrayEqual(SArray , TArray);
}
bool JudgeArrayEqual(int *sa , int *ta)
{
int i;
for(i=0;i<26;i++)
{
if(sa[i] != ta[i])
{
return 0;
}
}
return 1;
}
(2)提交版本2
bool isAnagram(char * s, char * t)
{
bool JudgeArrayEqual(int *sa , int *ta);
int SArray[26] = {0};
int TArray[26] = {0};
size_t SStrLen = strlen(s);
size_t TStrLen = strlen(t);
if(SStrLen != TStrLen)
{
return 0;
}
size_t i;
int tmp,tmp1;
for(i=0;i<SStrLen;i++)
{
tmp = s[i] - 'a';
SArray[tmp]++;
tmp1 = t[i] - 'a';
TArray[tmp1]++;
}
return JudgeArrayEqual(SArray , TArray);
}
bool JudgeArrayEqual(int *sa , int *ta)
{
int i;
for(i=0;i<26;i++)
{
if(sa[i] != ta[i])
{
return 0;
}
}
return 1;
}
六、leecode提交截图