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; } }
题目来源:牛客网
浙公网安备 33010602011771号