最少前缀操作问题-题解.cpp

172 阅读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

思路

最小前缀,那么我们只需要找到从第一个位置开始S和T相同的位置不修改即可;那么我们只需要维护他们不同的位置数量个数即可;

最后用S.size - 不同的位置数量个数 就是答案

code

#include <iostream>
#include <string>
using namespace std;

int solution(string S, string T) {
    int p =0;
    bool ck =true;
    for (int i =0; i<min(S.size(),T.size()); i++) {
        if (S[i] == T[i] && ck){
            p++;
        }
        
    }
    return S.size()-p;
}

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;
}