hdu1247 字典树或者hash
题意:
给你一些串,问你哪些串是由其他两个串连接成的。
思路:
我用了两种方法,一个是hash,hash的时候用map实现的,第二种方法是字典树,字典树我们枚举每个一字符串,查找他的每一位,如果当前这一位是某个单词的最后一个字母,那么就重新跑到树的根节点,继续搜,搜到最后一个字母的时候,如果当前的这个字母是某个单词的最后一个那么就输出当前这个,还有就是注意一点,如果找到答案就直接break,不然后可能输出重复的,因为当前这个字符串可能被很多组合满足,还有就是不知道题目中有没有这样的数据
ab abab,这样不知道是否要输出abab,总之不用管就AC了,估计就是没有,要不就是题目说了我没注意。
字典树
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Tree
{
Tree *next[26];
int mk;
}Tree; Tree root; char str[50005][100]; void Buid_Tree(char *str)
{
int len = strlen(str);
Tree *p = &root ,*q;
for(int i = 0 ;i < len ;i ++)
{
int id = str[i] - 'a';
if(p -> next[id] == NULL)
{
q = (Tree *) malloc(sizeof(Tree));
q -> mk = 0;
for(int j = 0 ;j < 26 ;j ++)
q -> next[j] = NULL;
p -> next[id] = q;
p = p -> next[id];
}
else p = p -> next[id];
}
p -> mk = 1;
} void solve(char *str)
{
int len = strlen(str);
Tree *p = &root;
for(int i = 0 ;i < len ;i ++)
{
int id = str[i] - 'a';
p = p -> next[id];
if(p == NULL) break;
if(p -> mk)
{
Tree *pp = &root;
int mkk = 0;
for(int j = i + 1 ;j < len && !mkk;j ++)
{
int idd = str[j] - 'a';
pp = pp -> next[idd];
if(pp == NULL) mkk = 1;
}
if(!mkk && pp -> mk)
{
printf("%s\n" ,str);
break;
}
}
}
}
int main ()
{
for(int i = 0 ;i < 26 ;i ++)
root.next[i] = NULL;
int n = 0;
while(~scanf("%s" ,str[++n]))
{
Buid_Tree(str[n]);
}
for(int i = 1 ;i <= n ;i ++)
solve(str[i]);
return 0;
} hash
#include<iostream>
#include<map>
#include<string>
using namespace std; string str[55000];
map<string ,int>hash; int main ()
{
int n = 0 ,i;
hash.clear();
while(cin >> str[++n])
{
hash[str[n]] = 1;
}
for(i = 1 ;i <= n ;i ++)
{
int len = str[i].size();
for(int k = 1 ;k < len ;k ++)
{
string s1(str[i] ,0 ,k);
string s2(str[i] ,k ,len);
if(hash[s1] && hash[s2])
{
cout<<str[i]<<endl;
break;
}
}
}
//getchar();getchar();
return 0;
}
hdu1247 字典树或者hash的更多相关文章
- hdu1247 字典树
开始以为枚举会超时,因为有50000的词.后来试了一发就过了.哈哈.枚举没一个单词,将单词拆为2半,如果2半都出现过,那就是要求的. #include<stdio.h> #include& ...
- hdu1247-Hat’s Words-(字典树)
http://acm.hdu.edu.cn/showproblem.php?pid=1247 题意:给出一堆单词,求哪些单词是其中某两个单词拼接起来的. 题解:用字典树存储所有的单词,标记结束点,再次 ...
- hdu2482 字典树+spfa
题意: 给你一个地图,地图上有公交站点和路线,问你从起点到终点至少要换多少次公交路线. 思路: 首先上面的题意说的和笼统,没说详细是因为这个题目叙述的很多,描述起来麻烦, 下面 ...
- hdu1247(字典树+枚举)
Hat's Words(hdu1247) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- poj 2503 Babelfish(Map、Hash、字典树)
题目链接:http://poj.org/bbs?problem_id=2503 思路分析: 题目数据数据量为10^5, 为查找问题,使用Hash或Map等查找树可以解决,也可以使用字典树查找. 代码( ...
- Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash
题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点 或者 ...
- 字符串hash与字典树
title: 字符串hash与字典树 date: 2018-08-01 22:05:29 tags: acm 算法 字符串 概述 这篇主要是关于字符串里的 字符串hash 和 字符串字典树,,两个都是 ...
- hash(2018年CSUST省赛选拔赛第一场B题+hash+字典树)
题目链接:http://csustacm.com:4803/problem/1006 题目: 思路:正如题目一样,本题是一个hash,比赛的时候用的字典树,但是不知道为什么一直RE(听学长说要动态开点 ...
- POJ 2503 Babelfish(map,字典树,快排+二分,hash)
题意:先构造一个词典,然后输入外文单词,输出相应的英语单词. 这道题有4种方法可以做: 1.map 2.字典树 3.快排+二分 4.hash表 参考博客:[解题报告]POJ_2503 字典树,MAP ...
随机推荐
- 一个 java 文件的执行过程详解
平时我们都使用 idea.eclipse 等软件来编写代码,在编写完之后直接点击运行就可以启动程序了,那么这个过程是怎么样的? 总体过程 我们编写的 java 文件在由编译器编译后会生成对应的 cla ...
- 剑指 Offer 59 - I. 滑动窗口的最大值 + 双指针 + 双端队列
剑指 Offer 59 - I. 滑动窗口的最大值 Offer_59_1 题目详情 方法一:暴力方法+双指针 package com.walegarrett.offer; /** * @Author ...
- 剑指 Offer 20. 表示数值的字符串 + 有限状态自动机
剑指 Offer 20. 表示数值的字符串 Offer 20 常规解法: 题目解题思路:需要注意几种情况: 输入的字符串前后可能有任意多个空格,这是合法的. 正负号: (1)正负号只能出现一次. (2 ...
- 小程序setData中key用变量
Page({ data:{ //类型列表 lastRootList:0,//上次点击的类型 rootList:[{name:'服饰箱包',selectClass:'root-active',iconC ...
- 一文读懂Java动态代理
作者 :潘潘 日期 :2020-11-22 事实上,对于很多Java编程人员来说,可能只需要达到从入门到上手的编程水准,就能很好的完成大部分研发工作.除非自己强主动获取,或者工作倒逼你学习,否则我们好 ...
- 在ASP.NET Core中用HttpClient(一)——获取数据和内容
在本文中,我们将学习如何在ASP.NET Core中集成和使用HttpClient.在学习不同HttpClient功能的同时使用Web API的资源.如何从Web API获取数据,以及如何直接使用Ht ...
- 关于MarkDown语法
Markdown语法 码云笔记链接:https://gitee.com/out_of_zi_wen/practical-experience/blob/master/Markdown%E8%AF%AD ...
- SHELL编程概念&变量剖析
一.shell软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...
- iOS 面试秘籍全套
栏目将持续更新--请iOS的小伙伴关注! (答案不唯一,仅供参考,文章最后有福利) iOS面试题大全(上) iOS面试题大全(下) 目录: iOS面试题:Run Loop iOS面试题:性能优化 ...
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...