力扣1717.删除子字符串的最大得分
-
贪心
- 假设ab的得分x永远大于y
- 若小于 交换xy和“ab”,“ba”
- 遍历所有字母
- 若不是a|b,直接跳过(作为分隔符)
- 只处理连续的只包含ab的字符串
- 当前为a ,ca++;
- 当前为b,若之前有a,删去“ab”
- 若没有a ,cb++;
- 连续ab完了以后 再处理“ba”字符串
- 假设ab的得分x永远大于y
-
class Solution { public: int maximumGain(string s, int x, int y) { int n = s.size(); if(x<y) { swap(x,y); for(int i=0;i<n;i++) { if(s[i] == 'a') s[i] = 'b'; else if(s[i] == 'b') s[i] = 'a'; } } int res=0; int i=0; while(i<n) { while(i<n && s[i] != 'a' && s[i] != 'b') i++; int ca=0,cb=0; while(i<n && (s[i] == 'a' || s[i] == 'b')) { if(s[i] == 'a') ca++; else { if(ca > 0) { ca --; res += x; } else cb ++; } i++; } res += min(ca,cb)*y; } return res; } };