华为机试---字符串运用-密码截取

题目描述

Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?



输入描述:

输入一个字符串


输出描述:

返回有效密码串的最大长度


输入例子:
ABBA

输出例子:
4

import java.util.Scanner;


public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
String str = scan.nextLine();
int max = getMaxLength(str);
System.out.println(max);
}//endwhile
scan.close();
}
/**
* 寻找最大回文字符串,返回它的长度
* 算法思想:定义两个下标标记位(low,high),low从前往后遍历,high从后往前遍历               
* */
private static int getMaxLength(String str){
int max_length = 0;
int str_length = str.length();
int low = 0;
int high = 0;
for(int i = 0 ; i < str_length - 1; i++){
for(int j = str_length - 1 ; j > i ; j--){
low = i;
high = j;
if(str.charAt(low) == str.charAt(high)){
while(str.charAt(low + 1) == str.charAt(high - 1)){
low++;
high--;
if(low > high){
if(max_length < j - i + 1){
max_length = j - i + 1;
}
break;
}
}//endwhile
}//endif
}//endfor_j
}//endfor_i
return max_length;
}
}

你可能感兴趣的:(java,华为)