最近在牛客网刷到的题目,分享一下~嘻嘻~
给定一个字符串(数字或大小写字母), 找出最长的对称的子串(如有多个,输出任意一个)。
例如:
输入:“abbaad”
输出:“abba”
package dailytest;
import java.util.Scanner;
public class FindLonger {
public static void main(String[] args) {
String maxStr = "";// 最终的结果
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();// 输入字符串
if (str == null) {
return;
}
if (str.length() <= 1) {
maxStr = str; // 字符串长度为1
}
if (str.length() == 2) { // 字符串长度为2
if (str.charAt(0) == str.charAt(1)) {
maxStr = str;
}
else {
maxStr = str.substring(1);
}
} else {// 字符串长度大于等于3时
// 遍历数组,以每个字符为中心找对称字符串
for (int i = 1; i < str.length() - 1; i++) {
String strTemp;
int left = i, right = i;
if (str.charAt(i - 1) == str.charAt(i + 1)) {
left = i - 1;
right = i + 1;
} else if (str.charAt(i - 1) == str.charAt(i)) {
left = i - 1;
right = i;
} else if (str.charAt(i) == str.charAt(i + 1)) {
left = i;
right = i + 1;
}
strTemp = getStr(left, right, str);
if (strTemp == null) {
strTemp = str.substring(left, right + 1);
}
if (strTemp.length() > maxStr.length()) {
maxStr = strTemp;
}
}
System.out.println(maxStr);
}
}
public static String getStr(int left, int right, String s) {
int i = left, j = right;
while (i >= 0 && j < s.length()) {
if (s.charAt(i) == s.charAt(j)) {
i--;
j++;
} else {
return s.substring(i + 1, j);
}
}
if (i < 0) {
return s.substring(0, j);
} else if (j >= s.length()) {
return s.substring(i + 1, j);
}
return null;
}
}