#include<stdio.h>
#include<string.h>
int check_pal(char *s)
{
int l = strlen(s),mid,i,h1[256]={0},h2[256]={0};
mid = l/2;
if(l&1)
for(i=0;i<mid;i++)
{
//printf("%c %c\n",s[i],s[i+mid]);
h1[s[i]]++;
h2[s[i+mid+1]]++;
}
else
for(i=0;i<mid;i++)
{
//printf("%c %c\n",s[i],s[i+mid]);
h1[s[i]]++;
h2[s[i+mid]]++;
}
for(i=0;i<256;i++)
if(h1[i]!=h2[i])
return 0;
return 1;
}
int main()
{
int t;
char s[1001];
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
if(check_pal(s))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
在上面的程序中,我想了解步骤 h1[s[i]]++;
和
h2[s[i+mid]]++;
最佳答案
该函数检查字符串前半部分和后半部分的字符频率是否相同。
取h1[s[i]]++;
s[i]
是字符串s
的字符i
。 h1[]
是前半部分看到的字符数。 h1[s[i]]
是给定字符的编号。 ++
增加该字符的计数。
h2[s[i+mid]]++;
与字符串的后半部分相同。 +mid
表示我们正在查看字符串的后半部分。
然后它检查所有字符的频率匹配。
关于c - 理解C中的字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381117/