题目
题目来源:华为机试H32
题目描述
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
本题含有多组样例输入。
输入描述:
输入一个字符串
输出描述:
返回有效密码串的最大长度
题解
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String string = scanner.nextLine();
int max = 0;
for(int i=0;i<string.length();i++){
max = Math.max(max,countLength(i,i,string));
max = Math.max(max,countLength(i,i+1,string));
}
System.out.println(max);
}
}
private static int countLength(int left, int right, String string) {
while(left>=0&&right<=string.length()-1&&string.charAt(left)==string.charAt(right)){
left--;
right++;
}
return right-left-1;
}
}
题解分析
1、主要思路:遍历每个字符,以当前字符为重心,向两边计算回文长度;
2、新建一个求回文长度的方法countLength(),可以通过控制left参数和right参数来解决两种回文的求解;
3、注意返回值需要减1;