数据结构与算法——提供一个单词,在字典中找到它的兄弟

数据结构——排序和查找应用词典 请设计一个简单的英文词典,实现以下功能: 1、生成词典:可以一个一个录入,也可以批量生成,每个英文单词有一个中文意思(至少十个单词,无序)。 2、查询:可以根据英文单词查找,或者通过中文意思查找,并进行显示。 3、排序:可以根据英文字母顺序进行排序。 4、输出:显示整个词典。 立即下载

题目:

 一个单词单词字母交换,可得另一个单词,如 army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程。(百度2012年实习生面试题)

解题思路:

http://superonion.iteye.com/blog/1522199

思路一:使用trie树

在字典树的前缀中再存储一个vector结构的容器:
Cpp代码
struct word  
{    
    vector<string> brother;    // 用于保存每个单词的兄弟单词  
    word *next[26];            // 字典树中每个节点代表一个字符,并指向下一个字符  
};  
如上述数据结构所示,字典树的建立是在预处理阶段完成的,首先根据字典中的单词来建立字典树,建立的时候,需要稍微特殊处理一下,就是比如pots、stop和tops互为兄弟单词,那么在字典中按照首字母顺序的话,应该先遇到pots单词,那么我首先对其进行排序,结果是opts,那么字典树中就分别建立4个节点,分别为o->p->t->s,当然这个是不同层次的,在节点s处的vector容器brother中添加单词pots,遇到stop的时候,同样的方法,排序是opts,此时发现这4个节点已经建立了,那么只需要在第四个节点s处的vector容器brother中添加单词stop,tops单词的处理方法是同样的。

这样建立完字典树后,查询兄弟单词的效率就会很高了,比哈希的效率还要高;查到tops的兄弟的单词的时候,首先排序,那么就是opts,然后在字典树中查找opts,在s处将其vector容器brother中的的单词输出就是tops的所有兄弟单词。
 

思路二:使用hash_map和链表

首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dgoo。 
使用链表将所有兄弟单词串在一起,hash_map的key为单词的key,value为链表的起始地址。 
开始时,先遍历字典,将每个单词都按照key加入到对应的链表当中。当需要找兄弟单词时,只需求取这个单词的key,然后到hash_map中找到对应的链表即可。 
这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)。
 

思路三:同样使用hash_map和链表

将每一个字母对应一个质数,然后让对应的质数相乘,将得到的值进行hash,这样兄弟单词的值就是一样的了,并且不同单词的质数相乘积肯定不同。
使用链表将所有兄弟单词串在一起,hash_map的key为单词的质数相乘积,value为链表的起始地址。
对于用户输入的单词进行计算,然后查找hash,将链表遍历输出就得到所有兄弟单词。
这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)。

要掌握的知识:

字典树:
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。
典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。
它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
参考链接:
http://baike.baidu.com/link?url=fFhIr3z5eY9Qor37DOB8IwlMJZ65PVoyq29k7WY5bvI7g3dIyma2q7n0SuzRA2VK_-67p869_r7cUYKjMXCCYa
http://blog.youkuaiyun.com/hguisu/article/details/8131559

相关题目:

如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)。

思路:判断各自素数乘积是否相等。更多方法请参考http://blog.youkuaiyun.com/v_JULY_v/article/details/6347454


英语词典(数据结构课设) 这是一个包含六级词库的英语小词典,适用于数据结构课设和C++课设,里面使用了折半查找,kmp匹配,队列,栈等一些算法和数据结构,使用Qt5.8开发,带有界面,里面的注释详细,代码规范,喜欢的朋友就下载一下吧 立即下载

相关推荐

python过滤单词用到的英文单词字典csv数据文件

python过滤单词用到的英文单词字典csv数据文件 python过滤单词用到的英文单词字典csv数据文件

算法数据结构——字典树、前缀树、单词查找树(Trie)精讲及python实现

字典树(Trie):又称为前缀树、单词查找树,是一种树形结构。顾名思义,就是一个像字典一样的树。它是字典的一种存储方式。字典中的每个单词在字典树中表现为一条从根节点出发的路径,路径相连的边上的字母连起来就形成对应的字符串。例如下图就是一棵字典树,其中包含有aabcacbaccachbchb这 7 个单词。从图中可以发现,这棵字典树用边来表示字母,从根节点到树上某一节点的路径就代表了一个单词。比如 1 → 2 → 6 → 10 表示的就是单词acc。

白话机器学习 1954

Python实战:5分钟搞定高德地图API批量地址转经纬度(附完整代码)

本文提供了一套完整的Python解决方案,利用高德地图Web服务API,实现批量地址到经纬度坐标的自动化转换。文章包含从API申请、核心代码编写到错误处理与性能优化的全流程实战指南,并附赠数据可视化方法,帮助数据分析师和开发者快速提升地理信息处理效率。

weixin_29047919的博客 582

数据结构 单词查找 二分法-索引表-Hash表

问题说明: 从标准输入中读入一个英文单词及查找方式,在一个给定的英文常用单词字典文件dictionary3000.txt中查找该单词,返回查找结果(查找到返回1,否则返回0)和查找过程中单词的比较次数。 实现查找的4种方法: 1、在单词表中以顺序查找方式查找,因为单词表已排好序,遇到相同的或第一个比待查找的单词大的单词,就要终止查找; 2、在单词表中以折半查找方式查找; 3、在单词表中通过索引表来获取单词查找范围,并在该查找范围中以折半方式查找。索引表构建方式为:以26个英文字母为头字母的单词在字典中的起始

Wang121201的博客 1万+

Qi标准下的充电协议及其记忆技巧

记忆无线充电协议中的。

m0_73991989的博客 1319

AGV路径规划实战:如何用Python+ROS实现激光SLAM导航(附避障代码)

本文提供了一份基于Python和ROS实现AGV激光SLAM导航的实战指南。内容涵盖从Docker环境搭建、激光雷达数据处理、Gmapping建图,到Move_Base全局/局部路径规划与TEB局部规划器配置的全流程。重点解析了如何通过参数调优实现稳定导航,并附带了紧急避障代码,帮助开发者快速构建具备自主路径规划与实时避障能力的AGV系统。

pepsi的博客 1233

数据结构与算法——单词查找树

数据结构与算法——单词查找树 单词查找树由字符键中的所有字符构造而成,和各种查找树一样,单词查找树也是由结点链接所组成的数据结构。这些链接可能为空,也可能指向其他结点(或者说以此为根结点的其他子树)。每个结点都有R条链接,R是字母表的大小,单词查找表通常含有大量的空链接,在绘制一棵单词查找树时一般会忽略所有的空链接。单词查找树的结点有两个域,一个是字符串键对应的值,字符串的最后一个字符所在的结点才...

weixin_30438813的博客 493

PSCAD学习笔记(1)Project Settings(重点snapshot设置)

若不勾选,则横坐标为实际时间2-7s,故障显示在第3s发生。图片中时间坐标轴显示为0-5s,故障时刻显示为第1s,即0-1s展示系统稳态,1-5s展示系统发生故障后的暂态响应,如何通过快照文件实现?勾选该项后,使用快照文件启动仿真会将仿真起始时间强制设置为0s,反之不勾选则依据快照文件保存的时间轴继续(即坐标为实际时间)。如果已有的快照文件保存的是0s至5s的仿真内容,则仿真运行时间从5s开始,到10s结束。如果已有的快照文件保存的是0s至2s的仿真内容,则仿真运行时间从2s开始,到7s结束;

gwenh的博客 7342

数据结构之字典树 Trie 单词查找树

参照算法第4版,强烈建议看书上的实现步骤,这里只是一个个人记录。 单词查找树的性能: 查找命中所需的时间与被查找的键的长度成正比。比如单词有7个字符,查找或插入操作最多只需要检查8个节点。 查找未命中只需检查若干个字符。   所需空间:在RN~RNw之间,其中R为字母表大小,N为键的个数,w为平均单词长度。 import java.util.LinkedList; import jav...

小萨摩的博客 427

镜头调焦的 调整的是焦距还是像距?

在镜头 “调焦”(即日常拍照时的)中,调整的核心是,而非焦距。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 1350

Attention优化|2w字原理&图解: 从Online-Softmax到FlashAttention V1/V2/V3

本文通过原理分析和图解的方式,通俗易懂地FlashAttention系列算法。FlashAttention V1/V2在LLM领域的应用已经非常广泛,相关的论文也反复读了几遍。FA1和FA2论文非常经典,都推荐读一下(不过FA2论文中公式错误不少本文大约1.8w字,包括以下内容:0x07 分布式训推使用FlashAttention0x09 FlashAttention中MQA/GQA以及Causal Mask处理。

具身机器人和通用AI 5229

在字典中查找兄弟单词

一个单词如果交换其所含字母顺序,得到的单词称为兄弟单词,例如mary和army是兄弟单词,即所含字母是一样的,只是字母顺序不同,用户输入一个单词,要求在一个字典中找出该单词的所有兄弟单词,并输出。给出相应的数据结构及算法。要求时间和空间复杂度尽可能。 目前思想: struct {    char  data;    int  n }; 根据数学定理:任何一个大于1的

叶易风云 1331

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 371

兄弟单词

好长时间没写blog了,写一篇表示我还活着,还在看代码,还在准备笔试和面试。。。 兄弟的单词就是两个或多个单词有相同的字母,只是字母顺序不同,例如:abfs 和fabs。找到所给单词的兄弟单词。 方案一:使用数据结构 map。兄弟单词共用一个签名key,key为单词内部排序后的词条,list存储同一key的单词集合;把相同key的兄弟单词组成一个链表。 代码: #include #incl

ZkvIA的博客 7823

课题申报新手入门必备指南!利用AI辅助搞定 6大关键部分,高效提升申报成功率(附AI提示词)

以下是我(或团队)与本课题相关的已有基础:【如:承担过的公开课、校本教研活动、教学改革实践、课程建设、区级/校级课题、教学反思积累等】请你完成以下任务:1)判断哪些内容与本课题的研究目标和内容具有直接或间接关联;以下是我当前的研究设想(可能比较笼统):【填写你的研究想法 / 教学困惑 / 初步设想】,请你帮我完成以下任务:1)先判断该设想中隐含的核心研究问题是什么;以下是我目前拟定的研究目标,请你从课题评审视角进行校正:【逐条粘贴你已有的研究目标】,请你帮我:1)判断每个目标是否具体、清晰、可评估;

智能AI让学术科研更容易 917

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【算法题】兄弟单词

给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词,例如单词army和mary互为兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有哪些兄弟单词?要求时间和空间效率尽可能的高。【2012年百度实习生招聘笔试题】思路一:trie(字典)树 在字典树的前缀中再存储一个vector结构的容器: struct word { vect

xiaxzhou的博客 1216

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

兄弟单词_牛客网

输入描述: 先输入字典中单词的个数,再输入n个单词作为字典单词。 输入一个单词,查找其在字典中兄弟单词的个数 再输入数字m 输出描述: 根据输入,输出查找到的兄弟单词的个数 如果存在查找到的兄弟单词的第m个单词,就输出;否则不输出即输出指定单词的指定序号的兄弟单词 示例1 输入 3abc bca cab abc1 输出 2 bca 什么是兄弟单词:给定一个单词...

ty6693的博客 1669

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

华为练习2 查找兄弟单词

/****************************************************************************** Copyright (C), 2001-2012, Huawei Tech. Co., Ltd. ******************************************************************

四夕日 月 2950

java中判断是否为兄弟单词的算法_给定一个单词,从字典查找该单词的所有兄弟单词。...

最近在网上看到百度的一个面试题:一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程。我的思路是这样的,所谓A单词是B单词的兄弟单词,无非就是组成A和B两个单词的所有字母都是一样,无非就是顺序不一样罢了。因此只要把单词按照AscII值来进行排序,然后判断下两个拍好序的单词是否完全一样,如果完全一样就是兄弟单词,...

weixin_42554394的博客 251

华为机试---查找兄弟单词

题目描述 实现一个可存储若干个单词的字典。用户可以: 1.在字典中加入单词 2.查找指定单词在字典中的兄弟单词个数 3.查找指定单词的指定序号的兄弟单词,指定序号指字典中兄弟单词按字典顺序排序后的序号 4.清空字典中所有的单词 定义,格式说明 1.单词:有小写英文字母组成,不含其它字符 2.兄弟单词: 给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,那么

bigthinker的博客 1821

查找兄弟单词

题目描述:(题目来源牛客网) 实现一个可以存储若干个单词的字典,用户可以 1.在字典中加入单词 2.查找指定单词在字典中的兄弟单词个数 3.查找指定单词的指定序号的兄弟单词,指定序号指字典中兄弟单词按字典顺序排序后的序号 4.清空字典中的所有单词 定义、格式说明 单词: 由小写英文字母组成,不含其它字符 兄弟单词: 给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,那么定义Y是X的...

qq_45386840的博客 326

百度面试题--给定一个单词,从字典查找该单词的所有兄弟单词

一 问题描述: 一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程。 二 解题思路:    本题有两个关键点:第一,如何设计英语字典的数据结构?第二,如何查找兄弟单词?    1. 设计英语字典的数据结构     如图,可以采用哈希链表的形式组织字典,而每个结点有三个域组成,分别是单词,频度和后继指针

wangzhicheng2013的专栏 4238

[编程题]查找兄弟单词

实现一个可存储若干个单词的字典。用户可以 在字典中加入单词; 查找指定单词在字典中的兄弟单词个数; 查找指定单词的指定序号的兄弟单词,指定序号指字典中兄弟单词按字典顺序排序后的序号(从1开始); 清空字典中所有单词。

na_beginning的专栏 1918
上一篇: C++——谈谈你对面向对象编程的认识
下一篇: 干货!如何正确使用Git Flow
readyao
博客等级 码龄11年 243粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值