LeetCode刷提笔记第1332题
题目描述:
给你一个字符串s,它仅由字母 'a' 和 'b' 组成。每一次删除操作都可以从s中删除一个回文子序列。
返回删除给定字符串中所有字符(字符串为空)的最小删除次数。
「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。
「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。
题目来源:力扣(LeetCode)
解题思路:
这个题目的迷惑性很多,因为如果子序列和子串这个概念没有区分开的话将是两种难度的题目,此题目是子序列,那么就容易多了,因为子序列的要求更低,只需要不打乱原来字符串的顺序,就可以随意的取出字符,因此分为三种情况:
1.原始字符串本身就是一个回文串,那么就只需要清除一次就可以删除所有的字符,所以返回结果为1
2.原始字符不是一个回文串,因为该字符串只有a和b这两种字符,所以只需要删除两次就可以将全部的字符删掉(第一次将所有的a删除,第二次将所有的b删除)
3.原始字符串为一个空传,直接返回0
代码的实现如下:
public int removePalindromeSub(String s) { if (s.length()==0) return 0; int left = 0; int right = s.length()-1; char[] chars = s.toCharArray(); while (left < right){ if (chars[left++] != chars[right--]) return 2; } return 1; }