1750. Minimum Length of String After Deleting Similar Ends
Given a string s
consisting only of characters 'a'
, 'b'
, and 'c'
. You are asked to apply the following algorithm on the string any number of times:
- Pick a non-empty prefix from the string
s
where all the characters in the prefix are equal. - Pick a non-empty suffix from the string
s
where all the characters in this suffix are equal. - The prefix and the suffix should not intersect at any index.
- The characters from the prefix and suffix must be the same.
- Delete both the prefix and the suffix.
Return the minimum length of s
after performing the above operation any number of times (possibly zero times).
Example 1:
Example 2:
Input: s = "cabaabac"
Output: 0
Explanation: An optimal sequence of operations is:
- Take prefix = "c" and suffix = "c" and remove them, s = "abaaba".
- Take prefix = "a" and suffix = "a" and remove them, s = "baab".
- Take prefix = "b" and suffix = "b" and remove them, s = "aa".
- Take prefix = "a" and suffix = "a" and remove them, s = "".
Example 3:
Input: s = "aabccabba"
Output: 3
Explanation: An optimal sequence of operations is:
- Take prefix = "aa" and suffix = "a" and remove them, s = "bccabb".
- Take prefix = "b" and suffix = "bb" and remove them, s = "cca".
Constraints:
1 <= s.length <= 105
s
only consists of characters'a'
,'b'
, and'c'
.
Solution:
class Solution {
public int minimumLength(String s) {
int left = 0;
int right = s.length() - 1;
while(left < right && s.charAt(left) == s.charAt(right)){
char cur = s.charAt(left);
while(left <= right && s.charAt(left) == cur){
left++;
}
while (left <= right && s.charAt(right) == cur){
right--;
}
}
return right - left + 1;
}
}
// TC: O(n)
// SC: O(1)
Note
注意脑子想的和现实的差距, 脑子想着while, 手残写的if, 然后卡了半天