题解 | #密码截取#
密码截取
http://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
方法比较笨,耗时680ms, 思路:len从最大长度开始逐渐减一,截取所有长度等于len的子串,判断是否是回文串,如果是直接退出循环,输出len 判断回文串的方法如果直接用StringBuilder.reverse()方***超时,所以用了双指针的方法,把最前面的和最后面的字符进行逐个对比看是否相等,i >= j时退出
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.next();
int len = str.length();
for (int i = 0, j = 0; i < str.length(); j++) {
if (j + len <= str.length() && len >= 1) {
String s = str.substring(j, j + len);
if (s.charAt(0) == s.charAt(s.length() - 1) && test(s)) {
break;
}
} else {
len--;
i++;
j = -1;
}
}
System.out.println(len);
}
}
//判断是否是回文串
public static boolean test(String str) {
if(str.length()==1){
return true;
}
boolean b = true;
for (int i = 0, j = str.length() - 1; i < str.length(); i++, j--) {
char c1 = str.charAt(i);
char c2 = str.charAt(j);
if (i >= j) {
break;
}
if (c1 != c2) {
b = false;
break;
}
}
return b;
//return str.equals(new StringBuilder(str).reverse().toString());
}
}