题目链接:POJ - 3096
题意:给你一个字符串,任意两个字符组成一个字符对,如果任意相同距离的字符对不存在相同的情况,则说明该字符串是奇异的,现在给出一些字符串让你判断并且以*结束
思路:遍历一遍所有的字符对,并将距离相同的字符对用map映射为1作为判断,用flag标记是否出现相同的字符对,一旦出现则NOT surprising
AC代码:
#include<iostream>
#include<string>
#include<map>
#include<cstdio>
#include<cstring>
using namespace std;
char s[101];
int main()
{
while(scanf("%s",s))
{
if(!strcmp(s,"*")) break;
int flag=1,k=strlen(s);
for(int i=0; i<k-1; i++)
{
map<string,int>m;
for(int j=0; i+j<k; j++)
{
char s1[3];
s1[0]=s[j];
s1[1]=s[i+j+1]; //搜索距离为i的字符对
s1[2]='\0';
if(m.find(s1)==m.end()) m[s1]=1;
else
{
flag=0;
break;
}
}
if(flag==0) break;
}
if(flag==1) printf("%s is surprising.\n",s);
else printf("%s is NOT surprising.\n",s);
}
return 0;
}