题目地址:POJ 3096
用set来存储每个长度的字符串,如果查询不存在,就插入到set容器中,如果已经存在,说明冲突。如果最终没有一次冲突,说明是个surpring strings。
代码如下:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include<algorithm>
using namespace std;
int main()
{
char s[81], s1[10];
int i, j, len, flag, flag1;
while(scanf("%s",s)!=EOF)
{
if(s[0]=='*')
break;
len=strlen(s);
flag1=0;
for(i=1;i<=len-2;i++)
{
set<string>q;
flag=0;
for(j=0;j<len-i;j++)
{
s1[0]=s[j];
s1[1]=s[j+i];
s1[2]='\0';
if(q.count(s1))
{
flag=1;
break;
}
else
{
q.insert(s1);
}
}
if(flag)
{
flag1=1;
break;
}
}
if(flag1)
{
printf("%s is NOT surprising.\n",s);
}
else
printf("%s is surprising.\n",s);
}
return 0;
}