密码截取

描述

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

输入描述:

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

输出描述:

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

示例 1

输入:
ABBA
输出:
4

示例 2

输入:
ABBBA
输出:
5

示例 3

输入:
12HHHHA
输出:
4

解1

遍历字符串, 判断以该字符为中心是不是回文
分为两种情况进行判断:
当该字符串的字符个数为奇数时
当该字符串的字符个数为偶数时

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
for(let i = 0; i < arr.length; i++){
const a = oddCode(i, arr);
const b = evenCode(i, arr);
const res = []
res.push(Math.max(a, b));
}

// 任意取一个字符, 判断以它为中心的奇数回文的长度
function oddCode(index, arr){
let left = index - 1;
let right = index + 1;
let count = 1;
while(left >= 0 && right < arr.length){
if(arr[left] === arr[right]){
count += 2;
left--;
right++;
}else{
return count;
}
}
return count;
}

// 任意取一个字符, 判断它是不是偶数回文串的长度
function evenCode(index, arr){
let left = index;
let right = index + 1;
let count = 0;
while(left >= 0 && right < arr.length){
if(arr[left] === arr[right]){
count += 2;
left --;
right ++;
}else{
return count;
}
}
return count;
}