You are given a string s
consisting only of letters 'a'
and 'b'
. In a single step you can remove one palindromic subsequence from s
.
Return the minimum number of steps to make the given string empty.
A string is a subsequence of a given string if it is generated by deleting some characters of a given string without changing its order. Note that a subsequence does not necessarily need to be contiguous.
A string is called palindrome if is one that reads the same backward as well as forward.
Example 1:
Input: s = "ababa" Output: 1 Explanation: s is already a palindrome, so its entirety can be removed in a single step.
Example 2:
Input: s = "abb" Output: 2 Explanation: "abb" -> "bb" -> "". Remove palindromic subsequence "a" then "bb".
Example 3:
Input: s = "baabb" Output: 2 Explanation: "baabb" -> "b" -> "". Remove palindromic subsequence "baab" then "b".
Constraints:
1 <= s.length <= 1000
s[i]
is either'a'
or'b'
.
这题读起来有点绕,就是说从一个由a和b组成的string里remove一个palindrome subsequence,注意这里的条件既要palindrome又是subsequence(也就是随便从这个string里抽字符出来就行,而不是substring),刚开始觉得有点懵,但是仔细一想其实因为只有a和b,所以最坏情况下一次remove全a和一次remove全b就行了,最好情况下就是本身是palindrome的话就直接全部remove了,所以这题就退化成了简单的isPalindrome。
class Solution {
public int removePalindromeSub(String s) {
int start = 0;
int end = s.length() - 1;
while (start < end) {
if (s.charAt(start) != s.charAt(end)) {
return 2;
}
start++;
end--;
}
return 1;
}
}