华为-字符串运用-密码截取
原创
©著作权归作者所有:来自51CTO博客作者ReignsDu的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目链接
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1?tpId=37&tqId=21255&tPage=2&rp=&ru=/ta/huawei&qru=/ta/huawei/question-ranking
题目描述
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
输入描述:
输出描述:
示例1
输入
复制
输出
复制
题解:
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
while (cin >> s){
int l = s.length();
int max = 1;
if (l == 1){
cout << max << endl;
}
else {
for (int i = 1; i < l - 1; i++){
int k = i - 1, j = i + 1, i_max = 1;
while (s[k] == s[j] && k >= 0 && j <= l - 1){
j++;
k--;
i_max += 2;
}
if (i_max > max){
max = i_max;
}
i_max = 0;
}
for (int i = 0; i < l - 1; i++){
int k = i, j = i + 1, i_max = 0;
while (s[k] == s[j] && k >= 0 && j <= l - 1){
j++;
k--;
i_max += 2;
}
if (i_max > max){
max = i_max;
}
i_max = 0;
}
}
cout << max << endl;
}
return 0;
}