天天看点

vivo2021届秋季校招在线编程[编程题]回文字符串

vivo2021届秋季校招在线编程[编程题]回文字符串

回文字符串就是正读和反读都一样的字符串,如“viv”、“nexen”、“12321”、“qqq”、“翻身把身翻” 等。

给定一个非空字符串 str,在最多可以删除一个字符的情况下请编程判定其能否成为回文字符串;如果可以则输出首次删除一个字符所能得到的回文字符串,如果不行则输出字符串 “false” 。

输入描述:

一个非空字符串

输出描述:

一个回文字符串,或者 “false” 字符串(如果无法构造出回文字符串的话)

输入例子1:

abda

输出例子1:

ada

例子说明1:

删除字符串"abda"中的一个字符 ‘b’ 后,得到 "ada"是一个回文字符串;删除一个字符 ‘d’ 后,得到 "aba"也是一个回文字符串;所以最终输出为 “ada”。

import java.util.* ;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in) ;
        String s = sc.next() ;
        String result = Palindrom(s) ;
        System.out.print(result) ;
    }
    public static String Palindrom(String s){
        if(s == null || s.length() <= 1){
            return "false" ;
        }
        int len = s.length() ;
        //for(int i = 0 , j = len-1 ; i < j ; i++ , j-- ){
          //  if(s.charAt(i) != s.charAt(j)){
                String result = orPalindrom(s);
                return result ;
            //}
        //}
       // return s ;
    }
    public static String orPalindrom(String s){
        int len = s.length() ;
        boolean isP = true ;
        StringBuilder result = new StringBuilder() ;
        for(int i = 0 ; i < len ; i++){
            for(int l = 0 , r = len-1 ; l < r ; l++ , r-- ){
               if(l == i){
                  l++ ;
               }
               if(r == i){
                  r-- ;
               }
               if(s.charAt(l) != s.charAt(r)){
                  isP = false ;
                  break ;
               }else{
                   isP = true ;
               }
            }
            if(isP){
               result.append(s.substring(0 , i)) ;
               result.append(s.substring(i+1 , len)) ;
               return result.toString() ;
              
            }
        }
        return "false" ;
       
    }
}