最少前缀操作问题
问题描述
小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;
}