Advertisement
1717. Maximum Score From Removing Substrings
UnknownView on LeetCode
1717.cs
C#
public class Solution
{
public int MaximumGain(string s, int x, int y)
{
return x > y ? Gain(s, "ab", x, "ba", y) : Gain(s, "ba", y, "ab", x);
}
private int Gain(string s, string sub1, int point1, string sub2, int point2)
{
int points = 0;
var st1 = new Stack<char>();
// First pass: remove sub1 patterns
foreach (char c in s)
{
if (st1.Count > 0 && st1.Peek() == sub1[0] && c == sub1[1])
{
st1.Pop();
points += point1;
}
else
st1.Push(c);
}
// Convert stack to string to preserve correct order
var remaining = new char[st1.Count];
for (int i = remaining.Length - 1; i >= 0; i--)
{
remaining[i] = st1.Pop();
}
// Second pass: remove sub2 patterns from remaining characters
var st2 = new Stack<char>();
foreach (char c in remaining)
{
if (st2.Count > 0 && st2.Peek() == sub2[0] && c == sub2[1])
{
st2.Pop();
points += point2;
}
else
st2.Push(c);
}
return points;
}
}Advertisement