7_12_2013 A: Delete it

Problem A: Delete it

Time Limit: 2 Sec   Memory Limit: 64 MB
Submit: 102   Solved: 28
[ Submit][ Status][ Web Board]

Description

克林在打一行字母时总是会打多一个字符,比如想打july时会打成juuly,这样他需要删掉其中一个u

克林想知道他可以删掉哪个位置的字符就可以变成他真正想打的一行字母。

Input

第一行一个整数:T (测试个数)

每个测试

输入两行,两个字符串(全是小写字母)

串长为 到 1000000

第一个串长度刚好比第二个的长度大一

Output

每个测试数据:

第一行输出可以删除的位置个数 P

如果P > 0 第二行输出可以删除的位置(小到大,空格隔开,位置从1开始算)

Sample Input

juuly 

july 

abc 

zz 

aa 

a

Sample Output

2 3 

1 2


#include<stdio.h>
#include<string.h>
char s1[1000001],s2[1000001];
int main()
{
	int n,i,j,p,cnt,len1,len2,sum;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%s %s", s1, s2);
		len1=strlen(s1);
		len2=len1-1;
		p=i=j=cnt=0;
		while(i<len1&&j<len2)
		{
			if(s1[i]!=s2[j])
			{
				p=i; 
				cnt++; 
				if(cnt>1) 
				    break;
				i++; 
			}
			else
			{i++;j++;}

		}
		if(cnt>1)
			printf("0\n");
        sum=0; 
        if(cnt==0)
        {
            for(i=len1-2;i>=0;i--)
            {
                if(s1[i]==s1[len1-1])
					sum++; 
				else
					break;
            }
			printf("%d\n",sum+1);
			for(j=i+2;j<=len1;j++){
			  printf("%d",j);
			  if(j!=len1)printf(" ");
			}
			printf("\n");
        }
        else if(cnt==1)
        {
            for(i=p-1;i>=0;i--) 
            {
                if(s1[i]==s1[p])
                    sum++;
                else break;
            }
            printf("%d\n",sum+1);
            for(j=i+2;j<=p+1;j++){
               printf("%d",j);
               if(j!=p+1)printf(" ");
           }
            printf("\n");
		}
	}
	return 0;
}


你可能感兴趣的:(7_12_2013 A: Delete it)