NYOJ 359 Delete it 字符串处理
生活随笔
收集整理的這篇文章主要介紹了
NYOJ 359 Delete it 字符串处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Delete it
時間限制:2000?ms ?|? 內存限制:65535?KB 難度:2 描述克林在打一行字母時總是會打多一個字符,比如想打”july”時會打成”juuly”,這樣他需要刪掉其中一個’u’。
克林想知道他可以刪掉哪個位置的字符就可以變成他真正想打的一行字母。
輸入每個測試
輸入兩行,兩個字符串(全是小寫字母)
串長為 1 到 1000000
第一個串長度剛好比第二個的長度大一
第一行輸出可以刪除的位置個數 P
如果P > 0 第二行輸出可以刪除的位置(小到大,空格隔開,位置從1開始算)
樣例輸出
2 2 3 0 2 1 2 ? ? ? 從第一個位置開始比較,直到找到不相等的位置,記錄不相等的位置,然后錯位比較,如果又找到一處不相等的位置,即不相等的位置個數超過1個,跳出循環,輸出0;然后用第一個字符串的最后一個元素一次與前面元素比較,如果相等,刪除點個數加1,否則跳出循環。 #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",s1);scanf("%s",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++; //不等位置數量加1if(cnt>1) break;i++; //錯位比較}else{i++;j++;}}if(cnt>1)//不相等數量大于1,都不能刪除printf("0\n");sum=0; //記錄刪除點的個數if(cnt==0) /*abcd abc*/{for(i=len1-2;i>=0;i--) //從倒數第二個元素開始,每次都和最后一個元素比較{if(s1[i]==s1[len1-1])sum++; elsebreak;}printf("%d\n",sum+1);for(j=i+2;j<=len1;j++) //i記錄與最后一個元素不等元素的位置,從i后一個開始輸出,下標加1,最后一個元素位置為len1printf("%d ",j);printf("\n");}else if(cnt==1){for(i=p-1;i>=0;i--) //從第一個不等位置往前與a[p]比較{if(s1[i]==s1[p])sum++;else break;}printf("%d\n",sum+1);for(j=i+2;j<=p+1;j++)printf("%d ",j);printf("\n");}}return 0; }總結
以上是生活随笔為你收集整理的NYOJ 359 Delete it 字符串处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NoSQL架构实践(三)——以NoSQL
- 下一篇: Spring 5的最终功能发行版即将来临