HDU--1247:Hat’s Words (字典树)

2023-11-16

1. 题目源地址http://acm.hdu.edu.cn/showproblem.php?pid=1247

2. 解题思路:

     第一次接触字典树,代码也是参考别人的。代码参考博客:http://blog.csdn.net/red_flame/article/details/8449537

3. 解题代码:

//HOJ--1247:Hat’s Words     字典树 
#include<iostream>
#include<string.h>
#include<string>
#define M 50005
#define N 60
using namespace std;

char str[M][N];
char s1[N],s2[N];

struct node
{
   int flag;
   node *next[26];
};

void Insert(node *root,char s[])
{
     int i=0,j,k;
     int len=strlen(s);
     node *current=root;
     
     while(i<len)
     {
        k=s[i]-'a';
        
        if(current->next[k]==NULL)
        {
           node *p=new node;
           
           for(j=0;j<26;j++)
              p->next[j]=NULL;
           p->flag=0;
              
           if(i==len-1)
              p->flag=1;
          
           current->next[k]=p;
           current=p;
        }
        
         else   current=current->next[k];
         i++;
     }
}

bool Find(node *root,char s[])
{
   int i=0,j,k;
   int len=strlen(s);
   node *current=root;
   
   while(i<len)
   {
      k=s[i]-'a';
      
      if(current->next[k]==NULL)
         return false;
         
      current=current->next[k];
      i++;
   }
   return current->flag;
}

int main()
{
    int i,j,k;
    int m,n,temp,cnt=0;
    node *root=new node;
    
    for(i=0;i<26;i++)
       root->next[i]=NULL;
    root->flag=0;
    
    while(gets(str[cnt]))
    {
       Insert(root,str[cnt]);
       cnt++;
    }
    
    for(i=0;i<cnt;i++)
    {
       temp=strlen(str[i]);
       
       for(j=1;j<temp;j++)
       {
          memset(s1,0,sizeof(s1));
          memset(s2,0,sizeof(s2));
          
          for(m=0;m<j;m++)
             s1[m]=str[i][m];
          
          for(n=j;n<temp;n++)
             s2[n-j]=str[i][n];
             
          if(Find(root,s1) && Find(root,s2))
          {
             cout<<str[i]<<endl;
             break;
          }
       }
    }
    //system("pause");
    return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDU--1247:Hat’s Words (字典树) 的相关文章

  • TOJ--3100:Getting Gold (DFS)

    1 题目源地址 http acm tju edu cn toj showp3100 html 2 源代码 TOJ 3100 Getting Gold include
  • 统计难题

    链接 http acm hdu edu cn showproblem php pid 1251 Problem Description Ignatius最近遇到一个难题 老师交给他很多单词 只有小写字母组成 不会有重复的单词出现 现在老师要
  • TOJ--1765:Longest Ordered Subsequence (DP求最长递增子序列)

    1 题目源地址 http acm tju edu cn toj showp1765 html 2 解题代码 TOJ 1765 Longest Ordered Subsequence DP求最长上升子序列 include
  • golang-- 字典树

    一 前言 看了百度团队在 infoq 上发表的一篇 如何在秒级完成词表匹配 https xie infoq cn article 97b2df7e41456335627ce4cd4 的文章 文章业务背景介绍的很清楚 里面有提到字典树 看到结
  • POJ--2709:Painter (贪心)

    1 题目源地址 http poj org problem id 2709 2 解题思路 每个颜料盒可能有3 12种颜色 其中每种颜色50ml 任意三种颜色 假设每种颜色Xml 可以混合出Xml的灰色 现在给出所需颜色的种数N 给出N个值分别
  • leetcode-140. 单词拆分 II (字典树/dp + 回溯法) + 字节测开字典树算法题

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict 在字符串中增加空格来构建一个句子 使得句子中所有的单词都在词典中 返回所有这些可能的句子 说明 分隔时可以重复使用字典中的单词 你可以假设字典中没有重复的单词 示例 1
  • POJ--1458:Common Subsequence (DP求最长公共子序列)

    1 题目源地址 http poj org problem id 1458 2 基本题意 给出两个序列 求出最长子序列的长度并输出 经典的动态规划求解 求最长公共子序列的经典DP解法代价为O mn 其中m和n分别为两个字符串的长度 具体实现如
  • HDU--1200:To and Fro (字符串)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1200 2 解题代码 include
  • POJ--1159:Palindrome (DP求最长公共子序列)

    1 题目源地址 http poj org problem id 1159 2 题目大意 题目就是给你一个字符串 问你添加最少几个字符之后字符串变成回文字符串 求给出的字符串和逆序的字符串的最长公共子序列 用总长度减去这个最长公共子序列的长度
  • Xor Sum(讲解异或)【字典树】

    Xor Sum 题目链接 点击 Time Limit 2000 1000 MS Java Others Memory Limit 132768 132768 K Java Others Total Submission s 6182 Acc
  • HDU--1233:还是畅通工程 (并查集 & 最小生成树Prim)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1233 2 简单思路 先对村庄距离从小到大排序 然后使用并查集的查找 一边查找一边加上村庄之间的距离 从而得到可以走通所有村庄的最短距离 3
  • [LeetCode] All Paths From Source to Target 从起点到目标点到所有路径

    LeetCode 797 All Paths From Source to Target 解题报告 Python C LeetCode All Paths From Source to Target 从起点到目标点到所有路径 Leetcod
  • 字典树(Trie树) Java实现源码参考

    定义 字典树 又称为单词查找树 Tire数 是一种树形结构 它是一种哈希树的变种 用于保存大量的字符串 它的优点是 利用字符串的公共前缀来节约存储空间 字典树结构对应的Java源码 public class Trie char val bo
  • HDU--1062:Text Reverse (字符串)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1062 2 解题思路 这道题算是字符串中的水题 题意很简单 输入一行字符串 每个单词按照逆序输出 很容易想到利用空格来控制输出 3 解题代码
  • HDU--3783:ZOJ (水题)

    1 题目源地址 http acm hdu edu cn showproblem php pid 3783 2 源代码 include
  • Nikitosh and xor【字典树+dp】

    题目链接 比较明显的 正向一个推过去的字典树 再反向退回来的一个字典树 然后异或和用差分的方式解决 字典树一定是要从第29位开始往下的 千万别从第0位往上 include
  • C#字典树(字母树)的模板

    保存一下JimLiu大神的 既然JimLiu大神的这个 net博客不维护了 我就搬过来了 哈哈哈 希望JimLiu大神不要见怪
  • HDU--1050:Moving Tables (贪心)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1050 2 解题思路 将每个输入的起始房间和结束房间转换为房间前面的区间 按区间起始位置从小到大排序 首先取第一个区间 后续如果有区间的起始位
  • 【数据结构】Trie 字典树

    数据结构源码 实现类 import java util TreeMap public class Trie private class Node public boolean isWord public TreeMap
  • HDU--1247:Hat’s Words (字典树)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1247 2 解题思路 第一次接触字典树 代码也是参考别人的 代码参考博客 http blog csdn net red flame artic

随机推荐