注意一些细节
替换的是子字符串 ,必须是连续的。比如示例一,如果替换的字符串长一点,整体数值就会小了
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
//这是我刚开始写的 题都没读懂
//class Solution {
//public:
// string maximumNumber(string num, vector<int>& change) {
// string res;
// for (int i = 0; i < change.size();i++){
// string temp=to_string(change[i]);
// res += temp;
// }
// for (int i = 0; i<num.size(); i++){
// char yuan = num[i];
// char ti = res[num[i]];
// if (yuan<ti)
// yuan = ti;
// }
// return num;
// }
//};
class Solution {
public:
string maximumNumber(string num, vector<int>& change) {
int n = num.size();
for (int i = 0; i < n; ++i){
// 寻找第一个突变后数值更大的位作为左边界
if (change[num[i]-'0'] > num[i] - '0'){
// 尝试更新右边界
while (i < n && change[num[i]-'0'] >= num[i] - '0'){
num[i] = '0' + change[num[i]-'0'];
++i;
}
break;
}
}
return num;
}
};
int main(){
Solution a;
string s = "132";
vector<int> num = { 9, 8, 5, 0, 3, 6, 4, 2, 6, 8 };
cout << a.maximumNumber(s, num);
system("pause");
return 0;
}
这个讲的也很清楚