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 4 1 3 6 5
Source:
基本想法:
按顺序截取所有子串,然后判断是否为回文,是的话把该子串的长度记录下来,然后最后结果输出长度最长的子串的长度
参考代码:
#include<iostream> #include<string> using namespace std; bool isPalindromeString(string str)//判断是否是回文 { //bool isPal = true; int index1 = 0; int index2 = str.length() - 1; while(index1 < index2) { if(str[index1] != str[index2]) return false; index1++; index2--; } return true; } void main() { string source,substring; int maxLength; int length; int i,j; while(cin>>source) { for(i=0 ; i<source.length() ; i++) { length = source.length() - i; for(j=i ; j<length ; j++) { substring = source.substr(i,j+1);//截取子串 if(isPalindromeString(substring)) maxLength = (maxLength>j+1)?maxLength:j+1; } } cout<<maxLength<<endl; maxLength = 0; } }
结果截图:
刚开始时并不知道什么时候停止输入,即没有输入停止的标记,到网上找:http://www.cnblogs.com/DpmiSystem/archive/2010/09/16/1827959.html
知道了无需判断什么时候结束