POJ 2001 Shortest Prefixes(字典树入门)

2024-09-07 18:08

本文主要是介绍POJ 2001 Shortest Prefixes(字典树入门),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

http://poj.org/problem?id=2001

题意:

找到多个字符串中,各自唯一的最短子串,例如 carte 与 carce 各自唯一的最短子串为cart与carc,即不会与其它字符串的子串重复。

思路:

字典树

解题心得:

更新关键值的时机很重要

代码:

#include<stdio.h>
#include<string>
typedef struct Node
{char c;int count;struct Node* next[26]; 
}Node;
Node* CreateNode()
{Node* T=(Node*)malloc(sizeof(Node));int i;for(i=0;i<26;i++){T->next[i]=NULL;}T->count=0;return T;
}
void insert(Node* T,char* str,int x)
{int len=strlen(str);//1.判断树根下是否存在st[i]int i;for(i=0;T->next[i]!=NULL;i++){//存在,更新count,并继续往下搜索。if(T->next[i]->c==str[x]){T->next[i]->count++;x++;//字符串结束if(x==len){return;}else{insert(T->next[i],str,x);return;}}}//2.不存在则建立节点if(T->next[i]==NULL){Node* temp=CreateNode();temp->c=str[x];temp->count=1;T->next[i]=temp;x++;if(x==len) return;else{insert(T->next[i],str,x);return;}}
}
void print(Node* T,char* str,int x)
{//寻找T下,关键值为str[x]的节点int i;int len=strlen(str);for(i=0;T->next[i]!=NULL;i++){if(T->next[i]->c==str[x]){if(T->next[i]->count==1){printf("%c",T->next[i]->c);return;}else{printf("%c",T->next[i]->c);x++;if(x<len) {print(T->next[i],str,x);}return;}}}
}
int main()
{char str[1001][30];Node* Tree=CreateNode();int i=0;while(gets(str[i])){Tree->count++;insert(Tree,str[i],0);i++;}int j;for(j=0;j<i;j++){printf("%s ",str[j]);print(Tree,str[j],0);printf("\n");}return 0;
}


这篇关于POJ 2001 Shortest Prefixes(字典树入门)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145776

相关文章

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3