一. 问题描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
二. 分析
2.1 判断一个字符串是不是回文
就是判断字符串第一个位置和最后一个位置是否相同,第二个位置和倒数第二个是否相同...
huiwen.png
2.2 要判断的字符串
image.png
同时,还可以去掉长度小于已经判断出来的字符串长度的回文判断
三. 代码
package com.hjb.leetcode;
/**
* @DESC 寻找字符串的最长回文字串
* @author HJB
* @date 2020年4月21日 下午8:14:56
*/
public class ZuiChangHuiWenZiChuan {
public String longestPalindrome(String s) {
if (s == null || s.length() < 1) {
return "";
}
String result = s.substring(0, 1);
String temp = "";
for (int i=0; i<s.length()-result.length(); i++) {
for (int j=i+result.length(); j<=s.length(); j++) {
temp = s.substring(i, j);
if (temp.length() > result.length()) {
if (isHuiWen(temp)) {
result = temp;
}
}
}
}
return result;
}
public boolean isHuiWen(String str) {
for (int i=0; i<=str.length()/2; i++) {
if (str.charAt(i) != str.charAt(str.length() - 1 -i)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
System.out.println(new ZuiChangHuiWenZiChuan().longestPalindrome("sdh上海自来水来自海上dssdfssd"));
}
}
运行结果:
上海自来水来自海上