密码截获

来源:互联网 发布:网络广告位租 编辑:程序博客网 时间:2024/04/29 06:13

ZJUT 1001
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:

Jin Qiwei

遍历所有可能 一个个检查并记录长度

#include <iostream>#include<string> #include<algorithm>using namespace std;bool check(int i,int j,string s);int jisuan(int i,int j,string s);int main(int argc, char *argv[]){    string s;    int k;    while(cin>>s)    {        int maxk=0;        for(int i=0;i<s.size();i++)        {            for(int j=i;j<s.size();j++)             {                k=jisuan(i,j,s);                maxk=max(k,maxk);            }        }        cout<<maxk<<endl;    }    return 0;}bool check(int i,int j,string s){    for(int m=i;m<=j;m++)        if(s[m]!=s[j-(m-i)])            return false;    return true;}int jisuan(int i,int j,string s){    if(!check(i,j,s))        return 1;    int k=0;    for(int m=i;m<=j;m++)    {        if(s[m]==s[j-(m-i)])            k++;        }       return k;}
0 0
原创粉丝点击