给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为1000。
示例 1:
输入:"babad"输出:"bab"注意:"aba"也是一个有效答案。
示例 2:
输入:"cbbd"输出:"bb"
解题思路很简单:
为了找到所要的回文字符串,我们需要遍历整一个字符串。
那么我们可以通过嵌套循环的方式截取字符串来判断是否为回文字符串;
如果是,并且对比之前存储的最大回文字符maxString,比maxString长度还长的话则替换该字符。
如何判断是否为回文字符串?
从两端 i , j 同时开始循环,对比两个字母的如果都是相等的,那么就是回文字符了,约束条件是 i <= j ,即是中间的位置。
public static String checkStr(String str) {
str = str.toLowerCase();
if(null == str || str.length() == 0) {
return "参数错误,参数为空!";
}
// 字符的长度
int length = str.length();
// 存放最终得到的最大回文字符结果
String maxString = "";
// 双重循环截取我们所要判断的字符串
for (int i = 0; i < length; i++) {
for(int j=i; j < length+1; j++) {
String cutStr = str.substring(i, j);
// 判断截取的字符串是否为回文字符串,且大于之前的maxString的长度时,则替换
if(isHuiwen(cutStr) && cutStr.length() > maxString.length()) {
maxString = cutStr;
}
}
}
if (maxString.length() >= 2) {
return maxString;
}else {
return null;
}
}
private static boolean isHuiwen(String cutStr) {
boolean flag = true;
int length = cutStr.length();
char arrayStr[] = cutStr.toCharArray();
// 从两端分别开始对比
for (int i = 0, j = length-1; i<=j; i++, j--) {
if(arrayStr[i]!=arrayStr[j]) {
flag = false;
}
}
return flag;
}
网友评论