题目描述
给出一些字符串,求是否有一个串是另一个串的前缀。
思路
和Phone List完全一样,字典树模板题,只是输出不同,注意初始化即可,不在赘述了。
代码
#include <bits/stdc++.h> using namespace std; int ch[5000][3],tot; bool ed[5000]; void clear() { memset(ch,0,sizeof(ch)); memset(ed,0,sizeof(ed)); tot=1; } bool insert(char *s) { int u=1; int len=strlen(s); bool f=0; for(int i=0;i<len;i++) { int num=s[i]-'0'; if(!ch[u][num])ch[u][num]=++tot; else if(i==len-1)f=1; u=ch[u][num]; if(ed[u])f=1; } ed[u]=1; return f; } int main() { int cas=0; char s[20]; while(~scanf(" %s",s)) { bool f=0; clear(); if(insert(s))f=1; while(scanf(" %s",s)) { if(strlen(s)==1&&s[0]=='9')break ; if(insert(s))f=1; } if(!f)printf("Set %d is immediately decodable\n",++cas); else printf("Set %d is not immediately decodable\n",++cas); } return 0; }