力扣刷题记录——392. 判断子序列、401. 二进制手表、409.最长回文串

简介: 力扣刷题记录——392. 判断子序列、401. 二进制手表、409.最长回文串

392. 判断子序列

题目描述

给定字符串 st ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace" "abcde" 的一个子序列,而"aec" 不是)。 示例 1: 输入:s = "abc", t = "ahbgdc" 输出:true 示例 2: 输入:s = "axc", t = "ahbgdc" 输出:false

解题思路

定义两个指针,分别去指向s和t,当两个指针所指内容相等时,两个指针分别加一,如果不相等,t指针加一,退出循环的条件就是某一个指针达到了对应字符串的长度。最后判断s指针是不是达到了s的长度即可解决问题。击败率还是蛮高的,挺满意的。

解题代码

1. def isSubsequence(s: str, t: str):
2. # s = "abc", t = "ahbgdc"
3. # 定义两个指针去指向s和t
4.     s_p = 0
5.     t_p = 0
6. while s_p < len(s) and t_p < len(t):
7. if s[s_p] == t[t_p]:
8.             s_p += 1
9.             t_p += 1
10. else:
11.             t_p += 1
12. if s_p == len(s):
13. return True
14. else:
15. return False

401. 二进制手表

题目描述

二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。例如,下面的二进制手表读取 "3:25" 。

(图源: WikiMedia - Binary clock samui moon.jpg ,许可协议: Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) 给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。 小时不会以零开头:例如,"01:00" 是无效的时间,正确的写法应该是 "1:00" 。 分钟必须由两位数组成,可能会以零开头:例如,"10:2" 是无效的时间,正确的写法应该是 "10:02" 。 示例 1: 输入:turnedOn = 1输出:["0:01","0:02","0:04","0:08","0:16","0:32","1:00","2:00","4:00","8:00"] 示例 2: 输入:turnedOn = 9输出:[]

解题思路

拿到这个题目的时候还是没有什么思路,想的还是暴力枚举法,虽然我知道时间复杂度肯定很高,不管了,能抓住老鼠的都是好猫。思路就是for循环去枚举,小时列表中一次选出i个,分钟列表中选出turnedOn-i,用到了itertools这个内置库,可以在指定的列表中选择指定的个数。之后就是求和判断符不符合规则,符合规则的转化格式存到列表中,最终返回这个最终列表。

解题代码

1. import itertools
2. class Solution:
3. def readBinaryWatch(self, turnedOn: int) -> List[str]:
4. # turnedOn = 5
5.         hour_list = [8,4,2,1]
6.         min_list = [32,16,8,4,2,1]
7.         target_list = []
8. for i in range(turnedOn+1):
9. # 在hour_list 里面选i个,在min_List选turnedOn-i个,之后求和判断,看有没有超出限制,没有的话添加到目标列表中,最后返回这个目标列表
10.             on_list = list(itertools.permutations(hour_list, i))
11.             down_list = list(itertools.permutations(min_list,turnedOn-i))
12. for m in on_list:
13. for n in down_list:
14. if sum(m) <=11 and sum(n) <=59:
15. if len(str(sum(n)))==1:
16.                             target_str = "{0}:0{1}".format(sum(m),sum(n))
17. else:
18.                             target_str = "{0}:{1}".format(sum(m), sum(n))
19.                         target_list.append(target_str)
20.         target_list = list(set(target_list))
21. return target_list

409.最长回文串

题目描述

给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s = "abccccdd" 输出:7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。 示例 2: 输入:s = "a" 输入:1 示例 3: 输入:s = "aaaaaccc" 输入:7

解题思路

这一题思路还是比较清晰的,还是用set把列表中的每一个元素提取出来,如果只有一个元素的话,那么直接返回字符串的长度就可以了。之后设置一个开关target,判断列表中是否有出现次数对2取模还余1的,如果有的话,target就要变成1。我们之后对单独对target进行一次判断,如果target发生变化,说明回文串中间还能再加一个数,所以最终结果+1。中间用一个for循环去数每一个元素出现的次数,我们只记录大于等于2的,并且只取2的整数倍。用一个count去记录,最终返回count的值。

解题代码

1. def longestPalindrome(s: str):
2.     s_list = [i for i in s]
3.     s__set_list = list(set(s))
4.     count = 0
5.     target = 0
6. if len(s__set_list)==1:
7. return len(s)
8. for i in s__set_list:
9. if s_list.count(i)%2 == 1:
10.             target = 1
11. if s_list.count(i) >= 2:
12.             count += (s_list.count(i)//2)*2
13. 
14. if target == 1:
15. return count+1
16. else:
17. return count


相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
107 2
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
10 1
|
2月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
3月前
|
算法 Java
LeetCode第67题二进制求和
这篇文章是关于LeetCode第67题二进制求和的解题思路和代码实现的分享。作者通过分析题目要求和二进制加法的规则,提供了一个Java语言的解决方案,并在最后总结了二进制在算法中的重要性。
LeetCode第67题二进制求和
|
3月前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
49 3
|
3月前
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
25 1
|
3月前
|
Python
【Leetcode刷题Python】LeetCode 478. 在圆内随机生成点
本文介绍了LeetCode 478题的解法,题目要求在给定圆的半径和圆心位置的情况下实现在圆内均匀随机生成点的功能,并提供了Python的实现代码。
28 1
|
3月前
|
算法 Python
【Leetcode刷题Python】295. 数据流的中位数
本文介绍了一种使用Python实现的数据结构,用以支持数据流中添加整数并返回当前所有元素的中位数,通过排序列表来计算中位数。
25 1
|
3月前
|
算法 Python
【Leetcode刷题Python】73. 矩阵置零
本文介绍了LeetCode第73题的解法,题目要求在给定矩阵中将所有值为0的元素所在的行和列全部置为0,并提供了一种原地算法的Python实现。
31 0
【Leetcode刷题Python】73. 矩阵置零