ZCMU--5286: Rose的字符串(C语言)

Description

一天Rose同学想得到一个仅由01组成的字符串S,Jack同学为了让Rose同学开心,于是打算去商店购买另一个也仅由01组成的字符串T。而商店的字符串价格由它的长度决定,比如字符串011售价3元,001011售价6元,商店可以提供任意的字符串。

心灵手巧的Jack为了省钱,决定低价购入一个较短的字符串并对其进行改造,改造不需要花钱,但只能进行两个操作:对字符串T的首部加上一个0,同时对其尾部加上一个1;或者对字符串T的首部加上一个1,同时对其尾部加上一个0。比如字符串T为010010,Jack可以将它改造为10100100或者00100101。

现在Rose已经给出了字符串S,请问Jack最少需要购买多少长度的字符串,使得心灵手巧的他可以把从商店购买来的字符串转化成字符串S呢?

Input

多组输入,第一行数字t(1≤t≤100)代表共有t组数据。

每组数据仅一行S,代表Rose期望的字符串,字符串仅包含0和1,长度不超过10^3。

Output

对于每组输入,每行请输出一个数字,代表Jack需要购买的最短字符串长度。

Sample Input

3
101010
11
01101

Sample Output

0
2
1

HINT

对于第一组样例,Jack可以不购买任何字符串,仅凭他的两种操作就可以拼出Rose所需要的字符串S。

解析:其实我们可以反着想,然后把给定的两端不断拆,直到不能拆(两端同为0或者1),那么此时串的长度就是我们需要购买的长度。

#include <stdio.h>
#include <string.h>
char a[1005];
int main()
{
	int t,l,x,y;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%s",a);
		l=strlen(a);//字符串长度
		x=0,y=l-1;//左端点,右端点
		while(x<y&&a[x]!=a[y]) x++,y--;//两端不同,可以拆,注意x<y条件
		printf("%d\n",y-x+1);//答案长度
	}
	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值