1. 题目
给定一个字符串s, 找出s中最长的回文子串, 可以假设s的最大长度为1000
2. 暴力破解
/**
* 最长回文子串
* 给定一个字符串s, 找出s中最长的回文子串, 可以假设s的最大长度为1000
*/
public class Solution {
public static void main(String[] args) {
long start = System.currentTimeMillis();
String s = "cbabad";
int p1 = 0;
int p2 = 1;
while (p2 < s.length()) {
if (s.charAt(p1) == s.charAt(p2)) {
System.out.println(s.substring(p1, p2+1));
p1 = p1 + 1;
p2 = p1 + 1;
} else if (p2 == s.length() - 1) {
p1 = p1 + 1;
p2 = p1 + 1;
}
else {
p2++;
}
}
long end = System.currentTimeMillis();
System.out.println("程序耗时:" + (end - start) + "ms");
}
}
2. 移动窗口
import java.util.HashSet;
/**
* 最长回文子串
* 给定一个字符串s, 找出s中最长的回文子串, 可以假设s的最大长度为1000
*/
public class Solution {
public static void main(String[] args) {
long start = System.currentTimeMillis();
String s = "cbabad";
HashSet<Character> set = new HashSet<Character>();
int p1 = 0;
int p2 = 0;
while (p2 < s.length()) {
if (set.contains(s.charAt(p2))) {
set.remove(s.charAt(p1));
p1++;
} else {
if (p1 == 0 || p2 == 0) {
set.add(s.charAt(p2));
p2++;
} else {
if (s.charAt(p2) == s.charAt(p1 - 1)) {
System.out.println(s.substring(p1 - 1, p2 + 1));
}
set.add(s.charAt(p2));
p2++;
}
}
}
long end = System.currentTimeMillis();
System.out.println("程序耗时:" + (end - start) + "ms");
}
}