XDU 1037 倍流畅序列(字符串匹配+贪心)

题目描述

对于一个0,1串s, 从左端开始读取它的0获得序列s0,从右端开始读取它的1获得s1,如果s0与s1同构,则称s为倍流畅序列.
例如:
011001是一个倍流畅序列, 因为:
s0 = 0__00_
s1 = 1__11_

而101不是, 因为:
s0 = _0_
s1 = 1_1

下面的问题是:对于一个0、1串s, 在s后添加最少数目的0或1,使它成为一个倍流畅序列。

输入

有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T<=100)。
接下来为T组数据,每组数据占一行,包含一个长度不超过50的0、1串。

输出

一共T行。
对于每组数据,在一行上输出添加了最少数目的0或1后所得到的倍流畅序列。

#include<cstdio>
#include<cstring>
int len,T;
char s[55],t[55];
bool check(int x)
{
    for(int i=x;i<len;i++){
        if(s[i]!=t[i-x])
            return false;
    }
    return true;
}
int main()
{
    scanf("%d",&T);
    while(T--){
        scanf("%s",s);
        len=strlen(s);
        for(int i=0;i<len;i++){
            if(s[i]=='0') t[len-1-i]='1';
            else t[len-1-i]='0';
        }
        t[len]='\0';
        int temp=0;
        for(int i=0;i<len;i++){
            if(check(i)){
                temp=len-i;
                break;    
            }
        }
        printf("%s",s);
        for(int i=temp;i<len;i++)
            printf("%c",t[i]);
        printf("\n");
    }
}
 
posted @ 2017-02-26 22:20  despair_ghost  阅读(230)  评论(0编辑  收藏  举报