網站建設公司價位百度指數的需求指數
鏈接:
833. 字符串中的查找與替換
題意:
n組操作,其中第i組:
- 檢查 子字符串
sources[i]
是否出現在 原字符串s
的索引indices[i]
處。 - 如果沒有出現, 什么也不做 。
- 如果出現,則用
targets[i]
替換 該子字符串。
所有替換操作必須 同時 發(fā)生,這意味著替換操作不應該影響彼此的索引。測試用例保證元素間不會重疊 。
解:
由于要對原字符串進行判斷所以我們不對字符串進行直接修改(當然好像弄一個偏移量也可以寫原地算法嗷)
由于每組操作互不影響,所以我們按原字符串的下標進行排序,然后從頭到尾處理就行,方便字符串拼接和字符串匹配
實際代碼:
#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;
}
限制:
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]
僅由小寫英文字母組成