首页 > 试题广场 >

验证回文字符串(二)

[编程题]验证回文字符串(二)
  • 热度指数:1490 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串,请问最多删除一个的情况下,能否组成一个回文字符串。

回文字符串:正着读和反着读是一样的字符串。

数据范围:字符串长度满足 ,字符串中仅包含小写英文字母
示例1

输入

"nowwon"

输出

true
示例2

输入

"nowewon"

输出

true
示例3

输入

"noweawon"

输出

true
示例4

输入

"noowwwn"

输出

false
import java.util.*;


public class Solution {

    public boolean palindrome (String str) {

        char a[] =str.toCharArray();
        for(int i=0;i<a.length;i++){
            if(a[i]!=a[a.length-1-i]&&a.length-1-i-i>=2){
                return false;
            }
        }
        return true;
    }
}

发表于 2022-10-18 21:38:27 回复(0)
用一下双指针就搞定了
public class Solution {
    public boolean palindrome(String str) {
        // write code here
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] != chars[chars.length - 1 - i]) {
                return false;
            }
            continue;
        }
        return true;
    }
}


发表于 2022-10-10 20:33:50 回复(0)
import java.util.*;

public class Solution {
    boolean flag = false;
    public boolean palindrome (String str) {
        int left = 0;
        int right = str.length()-1;
        
        while(left < right) {
            if(str.charAt(left) == str.charAt(right)) {
                left ++;
                right --;
            }else {
                if(flag) {
                    //说明已经删过一次了
                    return false;
                }
                flag = true;
                //需要判断一下,删左边好还是删右边好
                return palindrome(str.substring(left,right))||
                    palindrome(str.substring(left+1,right+1));
            }
        }
        return true;
    } 
}

发表于 2022-06-13 21:53:07 回复(0)