密码截获
Description:
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如ABBA,ABA,A,123321等,但是他们有时会在开始或结束时加入一些无关的字符以防别国破解。比如进行下列变化ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?Input:
测试数据有若干行字符串,包括字母(字母区分大小写),数字,符号。Output:
与输入相对应每一行输出一个整数,代表最长有效密码串的长度。Sample Input:
ABBA 12ABBA A ABAKK 51233214 abaaab
Sample Output:
4 41 3 6 5
#include<iostream> #include<string> using namespace std; int main() { string strinput; while(cin>>strinput) { int number = 0; int max = 0; int longstr = strinput.length(); for(int i=0;i<longstr;i++)//让程序从头开始一遍一遍的进行遍历 { number = 0; for(int begin=i, end=longstr-1, newend=longstr-1;end >= begin;) { if(strinput[begin]==strinput[end])//这里主要是让首尾进行比较 { if(begin!=end) number = number+2; else number=number+1; if(number>max) max=number; begin++; end--; } else //一旦出现首位不等的时候,这个时候就要应该重新设置一个尾,再重头开始遍历比较直到第一次结束。 { newend--; end=newend; begin=i; number=0; } } } cout<<max<<endl; } return 0; }
本题的设计思路主要是不断地循环比较