190. 偏爱的字符✅
模拟:用map存偏爱字符,遇到非偏爱字符时同时向两边搜即可
#include<bits/stdc++.h>
using namespace std;
void modify(int pos, string &res, const string &str, unordered_map<char, int> &love) {
for(int i = 1; ; i++) {
if(pos - i >= 0) { // 先搜左
if(love[str[pos-i]] == 1) { // 找到了偏爱字符
// 在res上修改,不要修改原字符串,因为要求所有替换是同时进行的
res[pos] = str[pos-i];
break;
}
}
if(pos + i < str.size()) { // 再搜右
if(love[str[pos+i]] == 1) { // 找到了偏爱字符
res[pos] = str[pos+i];
break;
}
}
}
}
int main() {
int n, m;
cin >> n >> m;
unordered_map<char, int> love;
char c;
for(int i = 0; i < m; i++) {
cin >> c;
love[c] = 1;
}
string str;
cin >> str;
string res = str;
for(int i = 0; i < str.size(); i++) {
if(love[str[i]] != 1) modify(i, res, str, love); // 处理非偏爱字符
}
cout << res << endl;
return 0;
}
191. 小明打砖块❌
区间DP