华为OJ_字符串处理

让我们来玩个字符消除游戏吧, 给定一个只包含大写字母的字符串s,消除过程是如下进行的:

1)如果s包含长度为2的由相同字母组成的子串,那么这些子串会被消除,余下的子串拼成新的字符串。
例如”ABCCBCCCAA”中”CC”,”CC”和”AA”会被同时消除,余下”AB”, “C”和”B”拼成新的字符串”ABBC”。

2)上述消除会反复一轮一轮进行,直到新的字符串不包含相邻的相同字符为止。
例如”ABCCBCCCAA”经过一轮消除得到”ABBC”,再经过一轮消除得到”AC”

解答要求 时间限制:1000ms, 内存限制:64MB

输入

第一行输入一个正整数 T(1 <= T <= 50) , 表示有 T 组测试数据.

对于每个测试数据输入包括一行, 由大写字母组成的字符串s,长度不超过100.

输出

对于每组测试数据, 若最后可以把整个字符串全部消除, 就输出 Yes, 否则输出 No.

样例

输入样例 1 复制

2
ABCCBA
ABCCCCCBBBBB

输出样例 1

Yes
No

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int n = 0;
	int m = 0;
	int leng = 0;
	int i,j= 0;
	char str[100] = { 0 };
	scanf("%d",&n);
	for (i = 0; i < n; i++) {
		scanf("%s",str);
		//printf("str is %s\r\n",str);
		leng = strlen(str);
		for (j = 0; j < leng; j++) {
			if (str[j] == str[j+1]) {
				//删除元素
				for (m = j; m < leng-2; m++) {
					str[m] = str[m + 2];				
				}
				//printf("str 1 is %s\r\n", str);
				leng = leng - 2;
				j = -1;
			}
		}
		//printf("leng is %d\r\n", leng);
		if (leng == 0) {
			printf("Yes\r\n");	
		}
		else {
			printf("No\r\n");		
		}
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值