Java笔记-贪心算法
贪心算法
在允许最多删除一个字符的情况下,同样可以使用双指针,通过贪心算法实现。
初始化两个指针 low 和 high 分别指向字符串的第一个字符和最后一个字符。
每次判断两个指针指向的字符是否相同,如果相同,则更新指针,
令 low = low + 1 和 high = high - 1,
然后判断更新后的指针范围内的子串是否是回文字符串。如果两个指针指向的字符不同,
则两个字符中必须有一个被删除,此时我们就分成两种情况:即删除左指针对应的字符,
留下子串 s[low + 1], s[low + 1], ..., s[high],或者删除右指针对应的字符,留下子串 s[low], s[low + 1], ..., s[high - 1]。当这两个子串中至少有一个是回文串时,就说明原始字符串删除一个字符之后就以成为回文串。
int del = 0;
public boolean validPalindrome(String s ){
int i = 0,j= s.length()-1;
while(i < j){
if(s.charAt(i)==s.charAt(j)){
i++;
j--;
}else{
if(del == 0){
del++;
return validPalindrome(s.substring(i,j))||validPalindrome(s.substring(i+1,j+1));
转载请注明原文地址:https://ipadbbs.8miu.com/read-36139.html