牛客 HJ32 密码截取

Posted 顧棟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客 HJ32 密码截取相关的知识,希望对你有一定的参考价值。

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

数据范围: 字符串长度满足 1 ≤ n ≤ 2500 1 \\le n \\le 2500 1n2500
输入描述:
输入一个字符串(字符串的长度不超过2500)

输出描述:
返回有效密码串的最大长度

示例1

输入:
ABBA

输出:
4

示例2

输入:
ABBBA

输出:
5

示例3

输入:
12HHHHA

输出:
4

JAVA 实现

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main 
    public static void main(String[] args) throws IOException 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        int max = 0;
        for (int i = 0; i < str.length() - 1; i++) 
            //ABA型
            int len1 = longest(str, i, i);
            //ABBA型
            int len2 = longest(str, i, i + 1);
            max = Math.max(max, Math.max(len1, len2));
        
        System.out.println(max);
    

	// 满足left与right相等的字符串长度
    private static int longest(String str, int left, int right) 
        // 当left和right下标的字符相等,则继续想左右继续传递。
        while (right < str.length() && left >= 0 &&
                str.charAt(left) == str.charAt(right)) 
            left--;
            right++;
        
        // 计算left与right之间的长度
        return right - left - 1;
    

以上是关于牛客 HJ32 密码截取的主要内容,如果未能解决你的问题,请参考以下文章

华为机试HJ32:密码截取

牛客 HJ20 密码验证合格程序

1229: 密码截获

牛客 HJ28 素数伴侣

牛客 HJ39 判断两个IP是否属于同一子网

牛客 HJ16 购物单