Suppose we have a string s with only three characters 'a', 'b', and 'c'. We shall apply the following algorithm on the string any number of times −
Select a non-empty prefix from the s where all the characters in the prefix are same.
Select a non-empty suffix from the s where all the characters in the suffix are same.
The prefix and the suffix are disjoint.
The characters from the prefix and suffix must be the same.
Remove both the prefix and the suffix from s.
Finally, we have to find the minimum length of s after performing the above operation any number of times (possibly zero times).
So, if the input is like s = "aabccabba", then the output will be 3 because we at first we can select prefix = "aa" and suffix = "a", so that the string after removal is "bccabb", then select prefix = "b" and suffix "bb", so string after removal is "cca", which is of length 3.
To solve this, we will follow these steps −
s := make a queue with s
while size of s > 1 and s[0] is last element of s, do
chk := s[0]
while s and s[0] are same, do
delete left element from s
while s is not empty and last element of s is same as chk, do
delete last element from s
return size of s
Example
Let us see the following implementation to get better understanding −
from collections import deque def solve(s): s = deque(s) while len(s) > 1 and s[0] == s[-1]: chk = s[0] while s and s[0] == chk: s.popleft() while s and s[-1] == chk: s.pop() return len(s) s = "aabccabba" print(solve(s))
Input
"aabccabba"
Output
3