HJ32 密码截取 – 三郎君的日常

面试 · 2023年5月13日 0

HJ32 密码截取

描述

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

输入描述:

输入一个字符串(字符串的长度不超过2500)

输出描述:

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

示例1

输入:

ABBA

输出:

4

示例2

输入:

ABBBA

复制输出:

5

示例3

输入:

12HHHHA

复制输出:

4
import java.util.*;
//本质是求任意字符串的最长对称子串 输出棋长度
//采取中心扩散法
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        System.out.print(longestdemo(str));
    }
    public static int longestdemo(String str){
        int n=str.length();
        int start = 0;
        int maxLength = 0;
        for(int i=0 ; i <2*n-1;i++){
            int left = i/2;
            int right = left+i%2;
            while(left>=0 && right<n && str.charAt(left)==str.charAt(right)){
                left--;
                right++;
            }
            int len = right-left-1;
            if(len>maxLength){
                maxLength=len; 
                start=left+1;}
        }
        return str.substring(start,start+maxLength).length();
    }
}