Delete it

Problem A: Delete it

Time Limit: 2 Sec   Memory Limit: 64 MB
Submit: 99   Solved: 25

Description

克林在打一行字母時老是會打多一個字符,好比想打july時會打成juuly,這樣他須要刪掉其中一個uios

克林想知道他能夠刪掉哪一個位置的字符就能夠變成他真正想打的一行字母。測試

 

Input

第一行一個整數:T (測試個數)spa

 

每一個測試指針

輸入兩行,兩個字符串(全是小寫字母)code

串長爲 到 1000000ip

第一個串長度恰好比第二個的長度大一字符串

 

Output

每一個測試數據:string

第一行輸出能夠刪除的位置個數 Pit

若是P > 0 第二行輸出能夠刪除的位置(小到大,空格隔開,位置從1開始算)io

 

Sample Input

3
juuly
july
abc
zz
aa
a

Sample Output

2
2 3
0
2
1 2

思路:題目意思應該很簡單就懂了,關鍵看用什麼方法,題目所給數據不大,能夠直接作。

能夠由兩個指針,一個從前日後掃,一個從後往前掃,比較兩個字符串的異同,當比較到不一樣時,結束掃描。
那麼結果就出來了。
代碼:
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
#define MAX 1000000
char a[MAX+10],b[MAX+10];
int main()
{
    //freopen("data.in", "r", stdin);
    //freopen("data.out","w",stdout);
    int n,i,len,j;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s%s",&a,&b);
        len=strlen(b);
        i=0;j=len+1;
        while(i<len&&a[i]==b[i])
            i++;
        while(j-1>0&&a[j-1]==b[j-2])
            j--;
        //printf("i=%d  j=%d\n",i,j);
        if(i-j+2<=0)
            printf("0\n");
        else
        {
            printf("%d\n",i-j+2);
            for(int m=j-1;m<=i;m++)
            {
                if(m==j-1)
                    printf("%d",m+1);
                else
                    printf(" %d",m+1);
            }
            printf("\n");
        }
    }
    return 0;
}
相關文章
相關標籤/搜索