Java机试题:给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。

回文串,指左右对称的字符串。

思路:找出字符串所有的子串,回文串既然左右对称,则字符串与字符串的反转必定相同,故可以判断是否是回文串。然后在所有子串中找出最大的回文串。

import java.util.*;
/*
 *  给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。
 *  所谓回文串,指左右对称的字符串。
 */
public class Main {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       while(sc.hasNextLine()){
          String str = sc.nextLine();
          // 获取字符串的中所有的子串
          List<String> list =  getListStr(str);
          StringBuffer sb = new StringBuffer(str);
          int maxLen = 0;
          for (String obj: list) {
               StringBuffer temp = new StringBuffer(obj);
               // 判断是否是回文子串:回文子串反转后与原来的相同
               if(obj.equals(temp.reverse().toString())){
                   // 找出最大回文子串长度
                   if(maxLen < obj.length()){
                       maxLen = obj.length();
                   }
               }
          }
          System.out.println(maxLen);
       }
    }

    private static List<String>  getListStr(String str) {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < str.length(); i++) {
            for (int j = i+1; j <= str.length(); j++) {
                list.add(str.substring(i,j));
            }
        }
        return list;
    }
}

 题目来源:牛客网

posted @ 2021-12-31 11:18  对月当歌  阅读(464)  评论(0)    收藏  举报