文章目录

  • 一、什么是变位词?
  • 二、如何判断是否为变位词?
    • 1、暴力法
    • 2、逐字比较
    • 3、排序比较
    • 4、计数器法
    • 5、合并偶数法

一、什么是变位词?

指两个词之间存在组成字母的重新排列关系,则认为是变位词;

比如 “weixin” 和 “xinwei” 这两个词所使用的字母完全一样,因此是变位词。


二、如何判断是否为变位词?

假设有两个单词 w1 和 w2,那么大概有以下方法可以判断这两个词是否为变位词:

1、暴力法

方法简介:
将 w1 出现过的字符,进行全排列,穷尽所有可能的组合;
然后看 w2 是否出现在 w1 的全排列列表中。

复杂度评估:
w1 这个全排列列表,随着字母个数变多,这个候选集的量就太大了,因此这个方法是不现实的。
复杂度无法估计。

2、逐字比较

方法简介:
将 w1 的字符,逐个在 w2 中检查是否存在。

复杂度评估:
双重嵌套循环,复杂度 O(n*n)

3、排序比较

方法简介:
将两个词,都先按照字母顺序排好序,然后逐个一一对比,一旦遇到不同,则说明不是变位词。

复杂度评估:
单循环,但是前期排序是需要代价的,这个代价比循环还大,因此复杂度是 O(n log n)

4、计数器法

方法简介:
对比两个词中每个字母出现的次数,如果 26 个字母出现的次数完全一样的话,则这两个属于变位词。
26位计数器,记录每个字母出现次数(要牺牲存储空间)
计数完成后,比较计数是否相同

复杂度评估:
三个循环, 但彼此没有嵌套,次数分别是 n + n + 26
因此这个数量级为 O(n),
性能较优,用空间换时间

5、合并偶数法

方法简介:
把两个词的字母全部合并在一起,如果每个字母都是偶数个,那就是变位词

复杂度评估:
跟上一种方法类似,也是需要牺牲存储空间来存储计数结果,复杂度 O(n)


变位词的多种判断方法相关推荐

  1. 【日常点滴014】python关于wordcloud词云图多种绘制方法教程

    wordcloud词云图绘制 1  总体代码和常用参数介绍 2  简单词云 3  指定形状词云 3.1  黑白底片蒙版图 3.2  彩色蒙版图 4  指定形状结巴分词词云 4.1  结巴库的常规使用 ...

  2. java变位词_Java程序检查字符串是否是变位词

    字符串变位词检查:有多种方法来查找两个字符串是变位词还是非变位词.经典的方法是获取每个字符串的字符数组,然后比较它们,如果两个字符数组都相等,那么字符串就是变位词.但在进行比较之前,请确保两个字符串的 ...

  3. python判断是否为变位词_python实现对变位词的判断方法

    Python实现对变位词的判断,供大家参考,具体内容如下 什么是变位词呢?即两个单词都是由相同的字母组成,而各自的字母顺序不同,譬如python和typhon,heart和earth. 变位词的判断 ...

  4. 浙大python判断两个字符串是否为变位词_python数据结构与算法 变位词

    变位词 问题简述 "变位词"判断问题:所谓 "变位词" 是指两个词之间存在组成字母的重新排列关系,例如 Heart 和 Earth,python 和 typho ...

  5. 浙大python判断两个字符串是否为变位词_算法2----------变位词

    1.背景: 变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary. 题1:判断两个字符串s1和s2是否为变位词. 经典的字符串变位词检测问题是比较不 ...

  6. c语言判断两个单词是否为变位词,C++变位词问题分析

    在<编程珠玑>一书的第二章提到了一个变位词问题,变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary.由变位词可以引申出几个算法问题,包 ...

  7. C++实现判断两个单词是否为变位词

    C++实现判断两个单词是否为变位词 如果两个单词中出现的字母相同,并且每个字母出现的次数也相同,那么这两个单词就称为变位词.完成一个函数判断输入的两个字符串是不是互为变位词 #include<i ...

  8. 浙大python判断两个字符串是否为变位词_Python实现对变位词的判断

    Python实现对变位词的判断 什么是变位词呢?即两个单词都是由相同的字母组成,而各自的字母顺序不同,譬如python和typhon,heart和earth. 变位词的判断 既然我们知道了变位词的定义 ...

  9. 判断两个单词是否互为变位词

    题目:在英语中,如果两个单词中出现的字母相同,并且每个字符出现的次数也相同,那么这两个单词互为变位词(Anagram).例如slient与listen.evil与live等互为变位词.请完成一个函数, ...

最新文章

  1. 前端工程师成长之多读好书
  2. 【PHP】 php7.0 扩展列表
  3. 深度学习项目-人脸表情识别
  4. 项目实体类报错_第一次开发项目感想
  5. java 泛型 泛型擦除(type erasure)
  6. 详解nodejs中express搭建权限管理系统
  7. linux里用cmake安装的软件要怎么卸载?
  8. 自动驾驶 8-3: 递归最小二乘法Recursive Least Squares
  9. hex与bin文件及hex2bin
  10. paypal无法提现?最新解决办法(实战教程)!
  11. WCF服务系列——定义宿主(IIS服务宿主)
  12. 前端工程师的摸鱼日常(13)
  13. xynuoj 1919 三国志
  14. 很好用的界面设计工具——Balsamiq(转载)
  15. nvme装系统不能自引导_怎么让老电脑实现UEFI启动NVME SSD固态硬盘进系统方法
  16. QT之OpenGL坐标系统
  17. sid图像数据_遥感影像数据
  18. Springboot+caffeine 实现两级缓存
  19. ps抠图、抠头发去背景等
  20. iisnbsp;访问输入用户名和密码问题

热门文章

  1. HDU-4477 Cut the rope II 递推
  2. Android中jsoup的混淆规则
  3. ffmpeg下载m3u8工具大全
  4. Android——扩大ImageButton的点击区域
  5. /usr/bin/ld: cannot find -lxxx
  6. 【Python】多线程爬取某站高颜值小姐姐照片(共1.62GB)
  7. Qt 之QNetworkAccessManager 下载断点续传
  8. html日历页面节假日_html+css+js实现一个简易日历
  9. java俄罗斯方块英文书籍_Java版俄罗斯方块
  10. Chrome 录屏神器 Screenity