鏈接:
833. 字符串中的查找與替換
題意:
n組操作,其中第i組:
- 檢查 子字符串
sources[i]
是否出現(xiàn)在 原字符串s
的索引indices[i]
處。 - 如果沒有出現(xiàn), 什么也不做 。
- 如果出現(xiàn),則用
targets[i]
替換 該子字符串。
所有替換操作必須 同時(shí) 發(fā)生,這意味著替換操作不應(yīng)該影響彼此的索引。測試用例保證元素間不會重疊 。
解:
由于要對原字符串進(jìn)行判斷所以我們不對字符串進(jìn)行直接修改(當(dāng)然好像弄一個(gè)偏移量也可以寫原地算法嗷)
由于每組操作互不影響,所以我們按原字符串的下標(biāo)進(jìn)行排序,然后從頭到尾處理就行,方便字符串拼接和字符串匹配
實(shí)際代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-650369.html
#include<bits/stdc++.h>
using namespace std;
string findReplaceString(string s, vector<int>& indices, vector<string>& sources, vector<string>& targets)
{
string ans;
int n=indices.size();
map<int,int>mp;
for(int i=0;i<n;i++) mp[indices[i]]=i;
auto it=mp.begin();
for(int i=0;i<s.size();i++)
{
if(i==it->first)
{
int mao=s.find(sources[it->second],i);
if(mao==i)
{
ans.append(targets[it->second]);
i+=sources[it->second].size()-1;
}
it++;
}
else ans+=s[i];
}
return s;
}
int main()
{
string s;cin>>s;
int n;cin>>n;
vector<int> indices;vector<string> sources,targets;
while(n--)
{
int t;string a,b;
cin>>t>>a>>b;
indices.push_back(t);
sources.push_back(a);
targets.push_back(b);
}
string ans=findReplaceString(s,indices,sources,targets);
cout<<ans<<endl;
return 0;
}
限制:文章來源地址http://www.zghlxwxcb.cn/news/detail-650369.html
1 <= s.length <= 1000
k == indices.length == sources.length == targets.length
1 <= k <= 100
0 <= indices[i] < s.length
1 <= sources[i].length, targets[i].length <= 50
-
s
僅由小寫英文字母組成 -
sources[i]
和targets[i]
僅由小寫英文字母組成
到了這里,關(guān)于2023-08-15力扣每日一題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!