HDU 1671 & POJ 3630 Phone List

题意

判断一组字符串中是否出现自己的前缀子串

思路

字典树

 
  
#include < stdio.h >
#include
< string .h >
const int MAXN = 100010 ;
struct dicTree
{
int next[ 10 ];
bool isWord;
void init(){
memset(next,
- 1 , sizeof (next));
isWord
= false ;
}
};
dicTree tree[MAXN];
int num;
bool ok;

void insert( char * s){
int index = 0 ,level = 1 ;
while ( * s ){
int i = * s - ' 0 ' ;
if ( tree[index].next[i] == - 1 ){
tree[
++ num].init();
tree[index].next[i]
= num;
index
= num;
}
else {
index
= tree[index].next[i];
if ( tree[index].isWord == true ){ // 判断长度小于等于当前插入单词的结尾
ok = false ;
return ;
}

}

s
++ ;
}
tree[index].isWord
= true ;
for ( int i = 0 ; i < 10 ; i ++ ){ // 判断单词长度大于当前插入单词的是否已经插入过
if ( tree[index].next[i] != - 1 ){
ok
= false ;
break ;
}
}
}
int main(){
int t,n;
char telNum[ 11 ];
scanf(
" %d " , & t);
while ( t -- ){
scanf(
" %d " , & n);
ok
= true ;
num
= 0 ;
tree[
0 ].init();
while ( n -- ){
if ( ok ){
scanf(
" %s " ,telNum);
insert(telNum);
}
else {//已经知道答案了 后面的数据可以忽略了
scanf(
" %s " ,telNum);
}
}
if ( ok )
printf(
" YES\n " );
else
printf(
" NO\n " );
}
return 0 ;
}

转载于:https://www.cnblogs.com/lxf90/archive/2011/04/19/2021089.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值