-
题目描述:
-
输入一个字符串,输出该字符串中对称的子字符串的最大长度。
比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
-
输入:
-
存在多组数据,每组数据一行字符串,长度不大于100。
-
输出:
-
输出回文子串的最大长度。
-
样例输入:
-
google
-
样例输出:
-
4
import java.io.IOException;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.StreamTokenizer;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Arrays;
public class Main
{
public static final boolean DEBUG = false;
public BufferedReader cin;
public PrintWriter cout;
public StreamTokenizer tokenizer;
public void init()
{
try {
if (DEBUG) {
cin = new BufferedReader(new InputStreamReader(
new FileInputStream("d:\\OJ\\uva_in.txt")));
} else {
cin = new BufferedReader(new InputStreamReader(System.in));
}
} catch (Exception e) {
e.printStackTrace();
}
tokenizer = new StreamTokenizer(cin);
cout = new PrintWriter(new OutputStreamWriter(System.out));
}
public String next()
{
try {
tokenizer.nextToken();
if (tokenizer.ttype == StreamTokenizer.TT_EOF)
return null;
else if (tokenizer.ttype == StreamTokenizer.TT_NUMBER)
return String.valueOf((int) tokenizer.nval);
else if (tokenizer.ttype == StreamTokenizer.TT_WORD) {
return tokenizer.sval;
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void solve(String s)
{
int len = s.length();
if (s.length() == 1) {
cout.println("1");
cout.flush();
return;
}
boolean[][] table = new boolean[len][len];
int longest = 1;
for (int i = 0; i < len; i++) {
table[i][i] = true;
}
for (int i = 0; i < len - 1; i++) {
if (s.charAt(i) == s.charAt(i + 1)) {
table[i][i + 1] = true;
longest = 2;
}
}
for (int l = 3; l <= len; l++) {
for (int i = 0; i <= len - l; i++) {
int j = i + l - 1;
if (s.charAt(i) == s.charAt(j)) {
table[i][j] = table[i + 1][j - 1];
if (table[i][j] && l > longest) {
longest = l;
}
} else {
table[i][j] = false;
}
}
}
cout.println(longest);
cout.flush();
}
public static void main(String[] args)
{
Main solver = new Main();
solver.init();
String s;
while ((s = solver.next()) != null) {
solver.solve(s);
}
}
}