天天看點

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" ;
       
    }
}