POJ3096--Surprising Strings(简单的字符串处理和相同字符串统计)

来源:互联网 发布:sql攻击 政府网站 编辑:程序博客网 时间:2024/05/21 07:11

题目大意:就是给定一个字符串s,长度为n,s中间隔为k(k=1,2,3...,n-2)的所有字符对如果没有相同的(保证所有k种距离下的情况),那么s是surprising的;否则NOT surprising。


算法设计:

枚举所有间隔为k内的字符对,如果每一个字符对仅出现一次,那么继续遍历,知道出现有重复的字符对相同,则说明NOT surprising。用map来映射每一个字符对的出现,且能保证唯一。


代码:

#include<iostream>#include<cstring>#include<stdio.h>#include<cstdlib>#include<map>using namespace std;int main(){string s;char ss[3];map<string,int> map_str;while(cin>>s){if(s=="*"){break;}bool flag = true;        //i就是两个字符之间的距离 for(int i=s.length()-1;i>=1;i--){map_str.clear();//不同的字符距离i对应的字符对之间是独立的。 for(int j=0;j<s.length()-i;j++){                //cout<<"map_str.size() = "<<map_str.size()<<endl;                //ss为字符对,将它加入到map中 ss[0] = s[j];ss[1] = s[j+i];ss[2] = '\0';//cout<<"ss = "<<ss<<" i = "<<i<<" j = "<<j<<endl;if( map_str[ ss  ] == 1 ){flag = false;break;}else{map_str[ ss ] = 1;}//cout<<"map_str.size() = "<<map_str.size()<<endl;}if(!flag)  break;}if(flag){cout<<s<<" is surprising."<<endl;}else{cout<<s<<" is NOT surprising."<<endl;}}    //system("pause") ;return 0;}

Run IDUserProblemResultMemoryTimeLanguageCode LengthSubmit Time12399924niuliguo3096Accepted732K32MSG++940B2013-12-24 00:49:22


注明出处:http://blog.csdn.net/lavorange/article/details/17517855


0 0
原创粉丝点击