当前位置: 首页 > news >正文

Broken Space Bar(Trie)[待补]

题目链接


在这里插入图片描述
1.给出一个字典,现在还有一串无空格的数,判断该串是否能由字典中若干单词串联形成

2.标答是构建字典树贪心选择长度最长的,即如果字典有orz,orzdd,序列有orzdd,那么会优先选orzdd

3.这题标答是错的,尽管能过题,只能说明题目数据太水,并不能说明代码正确。设想如果有的单词有公共前后缀,除了公共部分剩余的后缀前缀均在序列,例如:
1
orz
orzdd
ddab
1
orzddab
按标答来说是找不到的,但是事实上是可以由"orz"和"ddab"组成,因此这里感觉是要用递归判断,而如何递归也很麻烦,暂时没写出来,放着以后研究

待改进代码:

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <math.h>
#include <cstdio>
#include <string>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define lowbit(x) (x&(-x))
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const ll INF=1e18;
const int Mod=1e9+7;
const int maxn=2e5+10;
int a[105];

struct Trie{
    int Next[maxn][26],tot;
    int num[maxn];           //该结点结尾的字符串是否存在

    void init(){
        tot=0;
        memset(num,0,sizeof num);
        memset(Next,0,sizeof Next);
    }

    void insert(char *s,int k){    //插入字符串
        int p=0,len=strlen(s);
        for(int i=0;i<len;i++){
            int c=s[i]-'a';
            if(!Next[p][c]) Next[p][c]=++tot;  //没有就添加结点
            p=Next[p][c];
        }
        num[p]=k;
    }

    int find(char *s){    // 查找字符串
        int p=0,cnt=0,len=strlen(s);
        for(int i=0;i<len;i++){
            p=Next[p][s[i]-'a'];
            if(num[p] && (!Next[p][s[i+1]-'a'] || i==len-1)){
                a[cnt++]=num[p];
                p=0;
            }else if(!num[p] && !Next[p][s[i+1]-'a']){
                return 0;
            }
        }
        return cnt;
    }
}trie;

char s[105][105],str[55];;


int main(){
	int n,t,kase=0;
	while(~scanf("%d",&n) && n){
		trie.init();
		for(int i=1;i<=n;i++){
			scanf("%s",s[i]);
			trie.insert(s[i],i);
		}
		scanf("%d",&t);
		printf("Data set #%d:\n",++kase);
		for(int i=0;i<t;i++){
			scanf("%s",str);
			memset(a,0,sizeof(a));
			int ans=trie.find(str);
			if(!ans){
				printf("     %s --- misspelled word\n",str);
			}else if(ans==1){
				printf("     %s --- the word is in dictionary\n",str);
			}else{
				printf("     %s --- the word is concatenation of\n",str);
				for(int j=0;j<ans;j++){
					printf("          %s\n",s[a[j]]);
				}
			}
		}
		printf("\n");
	}
	return 0;
}

相关文章:

  • 小白兔和小灰兔
  • VC图片显示特效
  • UVA1153 Keep the Customer Satisfied(贪心+优先队列)
  • UVA10570 Meeting with Aliens(枚举/优化)
  • flash小实验
  • 2019 ICPC Greater New York Region J - Unicycles (规律+递推+矩阵快速幂)
  • WebLogic 9.2中文帮助网站公测中,欢迎大家访问!
  • 2019 ICPC Greater New York Region C - PassTheBuck(概率)
  • Oracle11gR2安装简介
  • 2019 ICPC Greater New York Region I - RationalBase(思维+进制转换)
  • 广告营销的创新
  • Educational Codeforces Round 86 C - Yet Another Counting Problem(规律+前缀和)
  • SQL Server2005重装Performance Monitor Counter Requirement错误解决
  • UVA1616 Caravan Robbers(二分答案+小数化分数)
  • UVA1619 Feel Good(链表+前缀和)
  • [nginx文档翻译系列] 控制nginx
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Bootstrap JS插件Alert源码分析
  • Javascript编码规范
  • Js基础知识(一) - 变量
  • leetcode388. Longest Absolute File Path
  • React-生命周期杂记
  • Sass Day-01
  • SegmentFault 2015 Top Rank
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 聊聊directory traversal attack
  • 前嗅ForeSpider教程:创建模板
  • 如何合理的规划jvm性能调优
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 写代码的正确姿势
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 原生Ajax
  • postgresql行列转换函数
  • 函数计算新功能-----支持C#函数
  • ​iOS实时查看App运行日志
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (145)光线追踪距离场柔和阴影
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (二)WCF的Binding模型
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (四)汇编语言——简单程序
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)LINQ之路
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET gRPC 和RESTful简单对比