2021-04-15 变位词判断

最近被专八考试打断了,我来继续更新了,哼哧


从今天开始研究①PKU陈斌老师的数据结构与算法课程,以及②何晗大哥的NLP入门。

变位词判断问题

问题描述:



这道题展示了同一问题的不同数量级解法

解法1:逐字检查

给定列表s1,s2,对于s1的每个字符,在s2中逐字对比,如果在s2中找到了,就“打勾”(这里的“打勾”采用的是把s2中的对于字符修改成none的方法)。(同时要注意,字符串是不可变类型,如果要修改,就要先放到列表里面)

如果s1的每一个字符都能在s2中找到,则判定为变位词。相反,只要有一个找不到,就不是变位词。

solution1的代码:


算法分析:

问题规模:总字符数n

主要部分在于两重循环,外层遍历s1每个字符,将内层循环执行n次

内存循环在s2中查找字符,每个字符的对比书,分别是1,2....n中的一个,且各不相同

所以总执行次数是1+2+3+.....+n=n(n+1)/2

数量级为O(n^2)



解法2:排序比较

思路:将两个字符串都按照字母顺序排序,最后比较是否相同

代码:

#重点学习一下逐个比较的技巧

算法分析:

粗看上去只有一个循环,数量级是O(n)

但sort不是没有代价的,其数量级差不多是O(n log n)

本算法时间主导的步骤是排序步骤,所以运行时间数量级为O(n log n)



你可能感兴趣的:(2021-04-15 变位词判断)