解题思路:
    核心思路为:

        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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论