解题思路:
核心思路为:
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 人评分
淘淘的名单 (C语言代码)浏览:1167 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:631 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:648 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:606 |
【蟠桃记】 (C语言代码)浏览:1084 |
三角形 (C语言代码)浏览:965 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:773 |
1126题解浏览:649 |
IP判断 (C语言代码)浏览:592 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:604 |