- Published on
2025-01-06
- Authors
- Name
2025-01-06
准备坚持刷一下leetcode
最近看youtube上的一个叫土妹的博主4年前的视频,我发现热爱分享的人坚持下去人生轨迹真的会不一样。 她最开始的时候就是分享如何去刷leetcode的。 我自己也注册过leetcode的帐号,但是一刷题就会有很大的挫败感,当时自己还很完主义。觉得自己不行。其实听了土妹的分享后,还来再聪明的人遇到自己不熟悉的领域的时候都是这样的。没有人是天才,可以从0-100,都是先从0-1,然后再慢慢积累上来的。你所看到的那些天才,只不过是人家刚好比你先掌握这些知识罢了。 做任何事情,我们都要有从零开始的决心和勇气,和良好的心态。 能够克服自己的完美主义,就是一大胜利。
准备去快速刷一个leetcode啦,等我的好消息。
我回来了,真的是这样,我拿到了一个题目,完全不会,有的思路也只是暴力解法。 https://leetcode.cn/problems/MPnaiL/
class Solution {
func checkInclusion(_ s1: String, _ s2: String) -> Bool {
//边界检查
if s1.count > s2.count {
return false
} else {
let permutations = self.permutations(s1)
var isExit: Bool = false
for permutation in permutations {
if s2.contains(permutation) {
isExit = true
break
}
}
return isExit
}
//s1的变位词
}
func permutations(_ s1: String) -> [String] {
// 如果字符串为空,返回空数组
guard !s1.isEmpty else { return [] }
// 转换为字符数组
let characters = Array(s1)
// 用于存储结果的数组
var result: [String] = []
// 递归函数生成全排列
func backtrack(_ current: [Character], _ remaining: [Character]) {
// 如果剩余字符为空,将当前排列加入结果
if remaining.isEmpty {
result.append(String(current))
return
}
// 遍历剩余字符,生成排列
for i in 0..<remaining.count {
var nextCurrent = current
var nextRemaining = remaining
nextCurrent.append(remaining[i]) // 添加当前字符
nextRemaining.remove(at: i) // 移除当前字符
backtrack(nextCurrent, nextRemaining)
}
}
// 初始调用
backtrack([], characters)
return result
}
}
ChatGpt解法
class Solution {
func checkInclusion(_ s1: String, _ s2: String) -> Bool {
let s1Count = s1.count
let s2Count = s2.count
// 如果 s1 比 s2 长,则不可能包含其变位词
if s1Count > s2Count {
return false
}
// 将字符串转换为字符数组
let s1Array = Array(s1)
let s2Array = Array(s2)
// 创建字符频率计数器,假设只有小写字母
let aAscii = Int(Character("a").asciiValue!)
var s1Frequency = [Int](repeating: 0, count: 26)
var windowFrequency = [Int](repeating: 0, count: 26)
// 统计 s1 的字符频率
for char in s1Array {
s1Frequency[Int(char.asciiValue!) - aAscii] += 1
}
// 初始化滑动窗口的字符频率(前 s1Count 个字符)
for i in 0..<s1Count {
windowFrequency[Int(s2Array[i].asciiValue!) - aAscii] += 1
}
// 滑动窗口
for i in 0...(s2Count - s1Count) {
// 如果窗口频率和 s1 频率匹配,则找到变位词
if windowFrequency == s1Frequency {
return true
}
// 滑动窗口:移除前一个字符,添加下一个字符
if i + s1Count < s2Count {
let removeIndex = Int(s2Array[i].asciiValue!) - aAscii
let addIndex = Int(s2Array[i + s1Count].asciiValue!) - aAscii
windowFrequency[removeIndex] -= 1
windowFrequency[addIndex] += 1
}
}
return false
}
}
最终,chatGpt给了我一个完美的解法,其中用到的思想是滑动窗口。等记录下来,不要太完美的一次解题,只需要去做,去经历。
今日分享
2024 年对你我影响最大的一本书应该是斯蒂芬·盖斯的《如何成为不完美主义者》,我的大部分行动力不足,拖延等都来源于完美主义。给我带来的变化是让我上线了自己的第一个apple store的app,说来惭愧,我是 2012 就开始ios开发的。2025 的一个想法就是用这本书的思想来打造一个app,做自己需要的工具。