zytzyt


私信TA

用户名:dotcpp0634555

访问量:109

签 名:

等  级
排  名 35239
经  验 434
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:
    核心思路为:

        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 人评分

  评论区

  • «
  • »