/*
Description
有些字符串,如果满足下面的性质,则称为成对的字符串:
a. 所有的字符在字符串中出现偶数次
b. 每一对相同的字符之间不会有出现奇数次的字符
现在给你一些字符串,请判断这些字符串是否为成对的字符串。
输入:
第一行是一个整数K,表示有多少个测试用例,以后每行一个测试用例。
每行为一个字符串(长度不超过1000个字符)。
输出:
每行输出一个测试用例的结果。如果是,输出Yes,否则输出No。
Sample Input
2
aAbbAaaabbcc
abcdefghijklmn
Sample Output
Yes
No
Source
程序设计实践
Hint
字符串只有英文字母,大小写敏感。
*/
- # include <stdio.h>
- # include <string.h>
- bool judge(char s[],int,int,bool *);
- int main(void)
- {
- int cases,length;
- char s[1000];
- scanf("%d",&cases);
- getchar();
- bool mark;
- while(cases--)
- {
- mark = true;
- gets(s);
- length = strlen(s);
- //printf("%d\n",length);
- if(judge(s,0,length-1,&mark))
- {
- printf("Yes\n");
- }
- else
- {
- printf("No\n");
- }
- }
- return 0;
- }
- bool judge(char s[],int start,int end,bool * mark)
- {
- int i;
- if(start > end )
- {
- return false;
- }
-
- if( ( end - start + 1 ) % 2 != 0 )
- {
- * mark = false;
- return *mark;
- }
- for(i=start+1;i<=end;i++)
- {
- if( s[i] == s[start] )
- {
- if( (start + 1 < i - 1) && *mark )
- {
- judge(s,start+1,i-1,mark);
- }
- if( (i + 1 < end) && *mark )
- {
- judge(s,i+1,end,mark);
- }
- break;
- }
-
- }
- if( i > end )
- {
- *mark = false;
- }
- return *mark;
- }
阅读(1047) | 评论(0) | 转发(0) |