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;
}