NYoj 685 查找字符串

描述

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

输入
第一行包含一个整数T(T<=100).表示测试数据组数。
接下来每组数据第一行包含两个整数n,m(n,m<100000),分别表示有n个字符串,小明要问你m次。
接下来n行,每行包含一个字符串,长度不大于15。
接下来m行,每行包含一个字符串,表示小明要问该串出现的次数。
输出
输出每组小明询问数串出现的次数。
样例输入
1
5 3
hello
[email protected][email protected]
hello
ibelieveicanac
hello
hello
icannotacit
Giveup
样例输出
3
0
0

题解:水题,就是多判断了“+”,“@”的情况,修改一下模板即可。

代码:
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 #include <algorithm>
 5 #include <iostream>
 6 #include <ctype.h>
 7 #include <iomanip>
 8 #include <queue>
 9 #include <stdlib.h>
10 using namespace std;
11
12
13 struct node
14 {
15     int count;
16     node *next[28];
17     node(){          //构造函数
18         count=0;
19         memset(next,0,sizeof(next));
20     }
21 };
22 node *root;
23 int k=0;
24 void insert(char *a)
25 {
26     int l=strlen(a);
27     node *p=root;
28     int i;
29     for(i=0;i<l;i++)
30     {
31         if(p->next[a[i]-‘+‘]==0)
32         {
33             p->next[a[i]-‘+‘]=new node;
34         }
35         // 已存在此前缀
36         p=p->next[a[i]-‘+‘];
37         p->count++;
38     }
39 }
40 int find(char *s)
41 {
42     struct node *p;
43     int len=strlen(s);
44     if(len==0) return 0;
45     p=root;
46     for(int i=0;i<len;i++){
47         if(p->next[s[i]-‘+‘]!=0)
48             p=p->next[s[i]-‘+‘];
49         else
50             return 0;
51     }
52     return p->count;
53 }
54 void de(node *p)
55 {
56     if(p==0)
57         return ;
58     int i;
59     for(i=0;i<10;i++)
60     {
61         de(p->next[i]);
62     }
63     delete p;
64
65 }
66 int main()
67 {
68     int t;
69     scanf("%d",&t);
70     char a[15],b[15];
71     while(t--)
72     {
73         root = new node;
74         int n,m;
75         k=0;
76         scanf("%d%d",&n,&m);
77         int i;
78         for(i=0;i<n;i++)
79         {
80             scanf("%s",a);
81             insert(a);
82         }
83         for(i=0;i<m;i++){
84             scanf("%s",b);
85             int ans=0;
86             ans=find(b);
87             printf("%d\n",ans);
88         }
89         de(root);
90     }
91     return 0;
92 }

时间: 2024-10-25 01:00:38

NYoj 685 查找字符串的相关文章

NYOJ 685 查找字符串(map)

查找字符串 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗?输入字符包括所有小写字母.'@'.'+'. 输入 第一行包含一个整数T(T<=100).表示测试数据组数. 接下来每组数据第一行包含两个整数n,m(n,m<100000),分别表示有n个字符串,小明要问你m次. 接下来n行,每行包含一个字符串,长度不大于15. 接下来m行,每行包含一个字符串,表

Qt中indexOf()和lastIndexOf()查找字符串位置

首页 ? JavaScript ? indexOf()和lastIndexOf()查找字符串位置 indexOf()和lastIndexOf()查找字符串位置 发表于 2011-10-05 由 admin 有两个可以从字符串中查找子字符串的方法:indexOf()和lastIndexOf().这两个方法都是从一个字符串中搜索给定的字符串,然后返回子字符串的位置(如果没有子字符串的位置,则返回-1).这两种的方法的区别在于:indexOf()方法从字符串的开头向后搜索字符串,而lastIndexO

查找字符串的 KMP 算法

查找字符串是我们平常编程过程中经常遇到的,现在介绍一种查找字符串算法,增加程序的执行速度. 通常我们是这么写的: /* content: search a string in a othor string author: lw date: 2015-01-30 target: kmp algorithm */ #include <stdio.h> #include <string.h> void compare(char * sourcestr, char * targetstr)

linux下查找字符串的命令

1. set命令可以显示出当前shell下所有全局参量定义及其值; 2. 查找并删除当前目录下小文件: find . -type f -size -10k -exec rm {} \; 说明: www.2cto.com -type f 查找文件 -size -10k, 小于10k的."+"是表示要求系统只列出大于指定大小的文件,而使用"-"则表示要求系统列出小于指定大小的文件. 3. 遍历文件夹grep一个字符串 find . -name "*c"

strstr()查找函数,strchr(),strrchr(),stristr()/strpos(),strrpos()查找字符串位置

在一个较长的字符串这查找匹配的字符串或字符,其中strstr()和strchr()是完全一样的. 例: echo strstr('why always you','you'); 输出: you 如果为: echo strstr('why always you','you'); 则无输出 stristr()函数对大小写不敏感 strrchr()函数会输出找到的字符串及字符串以后的字符 echo strrchr('why always you','always'); 输出: always you 有

php查找字符串是否存在

strstr //搜索字符串在另一字符串中的首次出现(对大小写敏感) //该函数返回字符串的其余部分(从匹配点).如未找到则返回 false stristr //查找字符串在另一字符串中第一次出现的位置(大小写不敏感) 例:echo strstr("Hello world!","world"); strpos //返回字符串在另一字符串中首次出现的位置(对大小写敏感) //如未找到则返回 false stripos //返回字符串在另一字符串中第一次出现的位置(大小

查找字符串中第一个不重复的字符

import java.util.*; public class GetFirstNoRepeatChar{ static char getChar(String s){ int len=s.length(); int len_tim=128; char c='F'; int []tim=new int[len_tim]; //以字符做下标,存储该字符出现次数 for(int i=0;i<len;i++){ c=s.charAt(i); tim[c]+=1; } //遍历,取得 for(int

Xshell 查找字符串方法

字符串主要用于编程,概念说明.函数解释等,所以在 xshell使用中它也是必要的,那如何在Xshell中查找字符串呢?本集小编就为大家好好讲解. 具体操作步骤如下: 一.用关键词查找: 1. 打开xshell, 在[编辑]菜单选择[查找]. 2. 在查找对话框中输入搜索的关键词. 3. 点击[查找下一处]即可. 二.用正则表达式查找: 1. 在[编辑]菜单选择[查找]. 2. 在查找对话框中输入搜索的关键词. 3. 选择[正则表达式]. 4. 点击[查找下一处]即可. xshell教程:http

区分/不区分大小写的比较,查找字符串在另一字符串中的位置,字符串开头是否包括另一字符串 hasPrefix

NSString *str; // 使用stringWithFormat生成一格式化字符串 str = [NSString stringWithFormat:@"This is %@","John"]; NSLog(@"str--->%@",str); // 字符串长度length; NSLog(@"The length of this string is %@",[str length]); // 字符串比较 isEq