在C ++中查找和替换字符串
假设我们有一个字符串S,我们将执行一些替换操作,用新的字母替换字母组。在每个替换操作中,有3个参数-起始索引i,源词x和目标词y。现在的规则是,如果x从原始字符串S中的位置i开始,那么我们将用y替换x的出现。否则,我们什么也不做。
因此,举个例子,考虑一下,如果我们有S =“ abcd”并有一些替换操作i = 2,x =“ cd”,y =“ ffff”,则因为“ cd”从原始字符串的位置2开始S,我们必须将其替换为“ ffff”。
让我们看看关于S =“ abcd”的另一个示例,如果我们同时具有替换操作i = 0,x =“ ab”,y =“ eee”,以及另一个替换操作i = 2,则x =“ ec” ,y =“ ffff”,第二个操作什么也不做,因为在原始字符串S [2] ='c'中,它与x [0] ='e'不匹配。
因此,如果我们有一个字符串S =“ abcd”,索引= [0,2],源= [“ a”,“ cd”],目标= [“ eee”,“ ffff”],那么输出将是“ eeebffff”。这是因为“ a”从S中的位置0开始,所以被“ eee”代替。现在,“ cd”从S的索引2开始,因此被“ ffff”代替。
为了解决这个问题,我们将遵循以下步骤-
定义一个成对的数组,称为有序的,n:=索引数组的大小
对于i,范围为0至n – 1
插入一对(indexes [i],i)进行排序。
反向排序
对于介于0到n – 1的j
S:=(从索引0到i的S的子字符串)连接目标,并串联(从i到源大小的S的子字符串– 1)
i:=排序对中的第一个值[j]
src:= sources [一对的第二个值sorted [j]]
目标:=目标[该对的第二个值排序[j]]
如果S的子串从索引i到源的大小– 1与源相同,则
返回S
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>using namespace std;
class Solution {
public:
string findReplaceString(string S, vector<int>& indexes, vector<string>& sources, vector<string>& targets) {
vector < pair <int, int> > sorted;
int n = indexes.size();
for(int i = 0; i < n; i++){
sorted.push_back({indexes[i], i});
}
sort(sorted.rbegin(), sorted.rend());
for(int j = 0; j < n; j++){
int i = sorted[j].first;
string source = sources[sorted[j].second];
string target = targets[sorted[j].second];
if(S.substr(i, source.size()) == source){
S = S.substr(0, i) + target + S.substr(i + source.size());
}
}
return S;
}
};
main(){
vector<int> v1 = {0, 2};
vector<string> v2 = {"a", "cd"};
vector<string> v3 = {"eee", "ffff"};
Solution ob;
cout << (ob.findReplaceString("abcd", v1, v2, v3));
}
输入值
"abcd"[0, 2]
["a", "cd"]
["eee", "ffff"]
输出结果
eeebffff
以上是 在C ++中查找和替换字符串 的全部内容, 来源链接: utcz.com/z/334864.html