题外
- 真正学会编程,只能通过实践。
- 需要有一个外在的标准(而不是自我的感觉),来检验思路及编码的可行性。
- 在线OJ是很好的客观检验手段。
- 对初学者而言,刷题不在多,不在难,而在于对每道题多思考,多设计不同思路。
- 一般而言,python语言并适合写出最高效的算法。但它的简单易读,很适合向初学者介绍算法的思想。
题目
【leetcode题库,第1982题】
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = “abc”, s2 = “bca”
输出: true
示例 2:
输入: s1 = “abc”, s2 = “bad”
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-permutation-lcci
思路1
将s1,s2转换为字典,键为字符,值为它出现的次数
例如:'ababca' 转为 {'a':3,'b':2,'c':1}
然后比较这两个字典是否相同即可。
思路2
将s1, s2 转为List,原地排序后,再比较这两个List是否相同。、
思路3
先将 s2 转为 List。
遍历 s1,从List中删去s1中出现的每个字符。
最后List为空则返回True
出现其它情况,都返回False
补记
需要详更细过程,请参考视频:
B站视频-刷力扣学算法a02