Description
You are given a string s
consisting of lowercase English letters.
You must repeatedly perform the following operation while the string s
has at least two consecutive characters:
- Remove the leftmost pair of adjacent characters in the string that are consecutive in the alphabet, in either order (e.g.,
'a'
and'b'
, or'b'
and'a'
). - Shift the remaining characters to the left to fill the gap.
Return the resulting string after no more operations can be performed.
Note: Consider the alphabet as circular, thus 'a'
and 'z'
are consecutive.
Β
Example 1:
Input: s = "abc"
Output: "c"
Explanation:
- Remove
"ab"
from the string, leaving"c"
as the remaining string. - No further operations are possible. Thus, the resulting string after all possible removals is
"c"
.
Example 2:
Input: s = "adcb"
Output: ""
Explanation:
- Remove
"dc"
from the string, leaving"ab"
as the remaining string. - Remove
"ab"
from the string, leaving""
as the remaining string. - No further operations are possible. Thus, the resulting string after all possible removals is
""
.
Example 3:
Input: s = "zadb"
Output: "db"
Explanation:
- Remove
"za"
from the string, leaving"db"
as the remaining string. - No further operations are possible. Thus, the resulting string after all possible removals is
"db"
.
Β
Constraints:
1 <= s.length <= 105
s
consists only of lowercase English letters.
Solution
Python3
class Solution:
def resultingString(self, s: str) -> str:
stack = []
def f(x):
return ord(x) - ord('a')
for x in s:
if stack and ((f(stack[-1]) + 1) % 26 == f(x) or f(stack[-1]) == (f(x) + 1) % 26):
stack.pop()
else:
stack.append(x)
return "".join(stack)