牛客 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
1≤n≤2500
输入描述:
输入一个字符串(字符串的长度不超过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 密码截取的主要内容,如果未能解决你的问题,请参考以下文章