贪心
- 假设ab的得分x永远大于y
- 若小于 交换xy和“ab”,“ba”
- 遍历所有字母
- 若不是a|b,直接跳过(作为分隔符)
-
只处理连续的只包含ab的字符串
- 当前为a ,ca++;
- 当前为b,若之前有a,删去“ab”
- 若没有a ,cb++;
- 连续ab完了以后 再处理“ba”字符串
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;
}
};