查找字符串

时间限制:1000 ms  |  内存限制:65535 KB
难度:3

描述

小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗?输入字符包括所有小写字母、‘@’、‘+’。

输入
第一行包含一个整数T(T<=100).表示测试数据组数。
接下来每组数据第一行包含两个整数n,m(n,m<100000),分别表示有n个字符串,小明要问你m次。
接下来n行,每行包含一个字符串,长度不大于15。
接下来m行,每行包含一个字符串,表示小明要问该串出现的次数。
输出
输出每组小明询问数串出现的次数。
样例输入
15 3helloit@is+so@easyhelloibelieveicanachellohelloicannotacitGiveup
样例输出
300
来源
NYIST第一届校赛(非专业组)
上传者
ACM_丁国强
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=685

无删除操作和有删除操作释放空间的差距,如图:1364为代码一所占的空间,308为代码二所占的空间

代码一:无删除操作

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef struct TrieNode{int data;TrieNode *next[28];TrieNode(){data=0;memset(next,0,sizeof(next));}
}T;
TrieNode *root=NULL;       //声明一个根节点
void Build(char *c)  //建字典树
{int i,v,l=strlen(c);TrieNode *p=root; TrieNode *q=NULL;for(i=0;i<l;i++){ if(c[i]=='+')v=26;else if(c[i]=='@')v=27;else v=c[i]-'a';if(p->next[v]==NULL){q=new TrieNode;p->next[v]=q;}p=p->next[v];p->data++;}
}
int Find(char *c)
{int i,v,l=strlen(c);TrieNode *p=root; for(i=0;i<l;i++){if(c[i]=='+')v=26;else if(c[i]=='@')v=27;else v=c[i]-'a';if(p->next[v]==NULL){return 0;break;}else p=p->next[v]; }return p->data;
}
int main()
{int T;int n,m;char str[15];scanf("%d",&T);while(T--){root=new TrieNode;scanf("%d %d",&n,&m);while(n--){       scanf("%s",str);Build(str);}while(m--){scanf("%s",str);printf("%d\n",Find(str));}}return 0;
}        

代码二:有删除操作

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef struct TrieNode{int data;TrieNode *next[28];TrieNode(){data=0;memset(next,0,sizeof(next));}
}T;
TrieNode *root=NULL;       //声明一个根节点
void Build(char *c)  //建字典树
{int i,v,l=strlen(c);TrieNode *p=root; TrieNode *q=NULL;for(i=0;i<l;i++){ if(c[i]=='+')v=26;else if(c[i]=='@')v=27;else v=c[i]-'a';if(p->next[v]==NULL){q=new TrieNode;p->next[v]=q;}p=p->next[v];p->data++;}
}
int Find(char *c)
{int i,v,l=strlen(c);TrieNode *p=root; for(i=0;i<l;i++){if(c[i]=='+')v=26;else if(c[i]=='@')v=27;else v=c[i]-'a';if(p->next[v]==NULL){return 0;break;}else p=p->next[v]; }return p->data;
}
void Delate(TrieNode *root)
{  for(int i=0;i<28;i++)  if(root->next[i])  Delate(root->next[i]);  delete(root);
}
int main()
{int T;int n,m;char str[15];scanf("%d",&T);while(T--){root=new TrieNode;scanf("%d %d",&n,&m);while(n--){       scanf("%s",str);Build(str);}while(m--){scanf("%s",str);printf("%d\n",Find(str));}Delate(root);}return 0;
}        

nyoj 685查找字符串相关推荐

  1. NYOJ 685 查找字符串(map)

    查找字符串 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗 ...

  2. NYOJ 685 查找字符串 字典树

    查找字符串 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗 ...

  3. 在目录下所有文件中查找字符串

    目录下的所有文件中查找字符串 find .| xargs grep -ri "class" 目录下的所有文件中查找字符串,并且只打印出含有该字符串的文件名 find .| xarg ...

  4. python找字符串_Python如何实现查找字符串

    Python如何实现查找字符串 发布时间:2020-10-28 22:07:02 来源:亿速云 阅读:89 作者:Leah 本篇文章为大家展示了Python如何实现查找字符串,内容简明扼要并且容易理解 ...

  5. vim 忽略大小写查找字符串

    Vim 忽略大小写查找字符串 Vim被认为是高效的代码管理工具,可想而知,平时利用vim进行代码编辑的程序员是多么厉害. 一.方法一 二.方法二 方法:底行模式下,输入命令 set ignorecas ...

  6. python查询文件软件_Python小工具--多文件查找字符串fs

    前几天,在看Android的makefile时,为方便自己在make文件查找字符串,用perl写了个小工具,实现的功能就是在目录下的多个文本文件中查找字符串.那个工具在同事的帮助下,已经实现了不少功能 ...

  7. php 计算字符串相邻最大重复数_php查找字符串出现次数的方法

    本文实例讲述了php查找字符串出现次数的方法.分享给大家供大家参考.具体方法如下: 在php中查找字符串出现次数的查找可以通过substr_count()函数来实现,下面就来给大家详细介绍这些函数. ...

  8. mysql逗号分隔正则查询_正则表达式在逗号分隔的列表中查找字符串和下一个字符-MySQL?...

    要搜索以逗号分隔的列表,请使用MySQL find_in_set().这里不需要为此使用正则表达式.语法如下-select *from yourTableName where find_in_set( ...

  9. C++horspool算法查找字符串是否包含子字符串(附完整源码)

    C++horspool算法查找字符串是否包含子字符串 C++Shorspool算法查找字符串是否包含子字符串完整源码(定义,实现,main函数测试) C++Shorspool算法查找字符串是否包含子字 ...

最新文章

  1. 探究oracle clob字段是怎样存储的
  2. mysql地区时间_mysql – 带时区的日期时间格式
  3. 话筒增益_话筒啸叫怎么办?教你四个解决话筒啸叫的方法!
  4. ABAP, UI5和webpack的处理入口
  5. 最大子序和:单调队列维护一个上升序列
  6. html5 拍照 清晰度,html5强大的功能(一)
  7. 【转】Asp.Net MVC详解Controller之Filter
  8. JS数组操作之增删改查
  9. 如何实现一个拍照搜题功能
  10. 文本聚类分析算法_集成聚类系列(三)图聚类算法详解
  11. Android APK反编译就这么简单 详解(附图)
  12. MapABC地图API
  13. 打开DOSbox时设置指定虚拟路径
  14. Apache是干什么的?
  15. VMware 虚拟机开启Ip地址自动更换解决
  16. zuk z2 Android7.0官方,联想ZUK Z2确定升级安卓7.0:官方曝光系统截图
  17. CMake构建动态库
  18. Mac系统通过标签管理文件
  19. 【软考网络管理员】2023年软考网管初级常见知识考点(2)- 数据通信技术
  20. WC酱油记——博客一个月没更新留念

热门文章

  1. 福州大学java期末试卷2012_福州大学 07Java语言程序设计试卷(A卷).doc
  2. centos 桥接配置 设置网络代理 lnmp搭建
  3. 深入理解ES6--1.块级绑定
  4. Gson 使用总结 高级用法
  5. nonce和timestamp在Http安全协议中的作用
  6. 【云图】一键生成连锁店品牌地图
  7. C#设计模式系列:享元模式(Flyweight)
  8. heartbeat自带的断网切换功能-ipfail
  9. Android中多媒体处理【转】
  10. BREW应用的分发流程