解题思路:
核心思路为:
1. 首先初始化两个字符串指针,分别指向字符串A、B的开头(后称A指针和B指针)。
2. 比较A、B指针的指向值是否相等,若相等则双指针后移一位,并重复step2;若不相等则到step3。
3. B指针不动,初始化O指针从A指针位置出发往后扫描,O指针后移扫描字符串A与B指针的指向值比较,若在扫描过程中存在有相同值则停止扫描,将O指针变为新的A指针,B指针依旧不变,此时操作次数+(O指针的位置-B指针的位置);若O指针扫描完A字符串并没有找到有跟B指针的指向值相等的字符,则操作次数+1,A、B指针位置不变。
4. A、B指针后移一位,回到step2继续,直到A指针或者B指针越界,此时到step5。
5. 若字符串A比B短,操作次数 = 操作次数 +字符串B的长度-字符串A的长度;否则操作次数不做改变。
注意事项:
上述的思路其实不难,如果想要快速理解,建议拿纸和笔亲手模拟一遍这个过程。
参考代码:
#include<iostream> using namespace std; int main() { string S1,S2; getline(cin,S1); getline(cin,S2); int len1=S1.length(),len2=S2.length(); int min; if(len1>len2) min = len2; else min = len1; int i=0,q=0,o=0;//双指针,i对应S1,q对应S2. int times=0; while(i<=min && q<=min){ if(S1[i] != S2[q]){ //搜索S1 for(o=i ; o<len1 ; o++){ if(S1[o] == S2[q]) break; } if(o==len1 && i!=len1){ times++; }else{ times = times + o-i; i=o; } } i++;q++; } if(len2>len1){ times = times+len2-len1; } cout<<times; return 0; }
0.0分
0 人评分
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:772 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5242 |
1118(求助_已解决)浏览:337 |
C二级辅导-分段函数 (C语言代码)浏览:618 |
钟神赛车 (C语言代码)浏览:618 |
最好的,浏览:582 |
三进制小数 (C语言代码)浏览:843 |
逆反的01串 (C语言代码)浏览:1462 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:614 |
C二级辅导-阶乘数列 (C语言代码)浏览:665 |