题目链接
题目描述
算法思路
重点:元素间不会重叠,所有替换操作同时运行
要注意的是,如果直接在indices[i]对字符串s进行替换,s的indices[i]之后的字符的位置就会发生变化
一个简单的思路就是用数组index存储字串替换产生的长度偏移,当进行替换时,要替换的子串的位置为indices[i]+indices[i]之前的偏移和pos。
代码
class Solution {
public:
string findReplaceString(string s, vector<int>& indices, vector<string>& sources, vector<string>& targets) {
int n=s.size();
int k=indices.size();
int len_source;
int pos;
string replace_s(s);
int index[n];
memset(index,0,sizeof(index));
for(int i=0;i<k;i++){
len_source=sources[i].size();
if(s.substr(indices[i],len_source)==sources[i]){
pos=0;
for(int j=0;j<indices[i];++j){
pos+=index[j];
}
replace_s.replace(indices[i]+pos,len_source,targets[i]);
index[indices[i]]=targets[i].size()-len_source;
}
}
return replace_s;
}
};