算法题 15 最少前缀操作问题(c++)

44 阅读1分钟

问题描述

小U和小R有两个字符串,分别是SS和TT,现在小U需要通过对SS进行若干次操作,使其变成TT的一个前缀。操作可以是修改SS的某一个字符,或者删除SS末尾的字符。现在你需要帮助小U计算出,最少需要多少次操作才能让SS变成TT的前缀。


测试样例

样例1:

输入:S = "aba", T = "abb"
输出:1

样例2:

输入:S = "abcd", T = "efg"
输出:4

样例3:

输入:S = "xyz", T = "xy"
输出:1

样例4:

输入:S = "hello", T = "helloworld"
输出:0

样例5:

输入:S = "same", T = "same"
输出:0


#include <iostream>

#include <string>

using namespace std;

int solution(string S, string T) {

    int res = 0 ;
    int i = 0 ;
    for(i = 0 ; i < S.length() ; i ++ )
    {
        if(i >T.length() - 1 )
        {
            res+=S.length()-T.length();
            break;
        }

        if(S[i] != T[i])

        {

            res ++;

        }

    }

    return res;

}

int main() {

    cout << (solution("aba""abb") == 1) << endl;

    cout << (solution("abcd""efg") == 4) << endl;

    cout << (solution("xyz""xy") == 1) << endl;

    cout << (solution("hello""helloworld") == 0) << endl;

    cout << (solution("same""same") == 0) << endl;

    return 0;

}

思路

只需对S字符串进行操作, 当前下标i如果S【i】和T【i】不相同,则增加一个操作,如果当前下标i已经大于t的长度,就对结果加上两者的差,然后输出答案