最近被专八考试打断了,我来继续更新了,哼哧
从今天开始研究①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)