题目链接
标签
字符串
步骤
Step1. 初始化 ans[]
:
for (int i = 0; i < s.length(); i++) { // 初始化ans
ans[i] = s[i];
}
Step2. 根据 index, source, target
查找;如果找到,那么将 ans[i]
更改为 target
,并将其后source.length()-1位设为空(被替换)。
for (int i = 0; i < n; i++) {
int idx = indices[i];
string src = sources[i], dst = targets[i];
// 1.check
if (!findStr(s, src, idx)) {
continue;
}
// 2.replace
ans[idx] = dst;
for (int j = idx + 1; j < idx + src.length(); j++) {
ans[j] = "";
}
}
其中,findStr()
如下:
bool findStr(string &str, string &target, int idx) {
int pos = str.find(target, idx);
if (pos == string::npos || pos != idx) {
return false;
}
return true;
}
Step3. 拼接 ans[]
为一个字符串。
string res;
for (int i = 0; i < ans.size(); i++) {
res += ans[i];
}
实现代码(C++)
class Solution {
public:
bool findStr(string &str, string &target, int idx) {
int pos = str.find(target, idx);
if (pos == string::npos || pos != idx) {
return false;
}
return true;
}
string findReplaceString(string s, vector<int>& indices, vector<string>& sources, vector<string>& targets) {
int n = sources.size();
vector<string> ans(s.length());
for (int i = 0; i < s.length(); i++) { // 初始化ans
ans[i] = s[i];
}
for (int i = 0; i < n; i++) {
int idx = indices[i];
string src = sources[i], dst = targets[i];
// 1.check
if (!findStr(s, src, idx)) {
continue;
}
// 2.replace
ans[idx] = dst;
for (int j = idx + 1; j < idx + src.length(); j++) {
ans[j] = "";
}
}
string res;
for (int i = 0; i < ans.size(); i++) {
res += ans[i];
}
return res;
}
};