本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——796. 旋转字符串、884. 两句话中的不常见单词、1046. 最后一块石头的重量》。
目录
796. 旋转字符串
题目描述
解题思路
解题代码
884. 两句话中的不常见单词
题目描述
解题思路
解题代码
1046. 最后一块石头的重量
题目描述
解题思路
解题代码
796. 旋转字符串
题目描述
给定两个字符串,
s
和goal
。如果在若干次旋转操作之后,s
能变成goal
,那么返回true
。
s
的 旋转操作 就是将s
最左边的字符移动到最右边。
- 例如, 若
s = 'abcde'
,在旋转一次之后结果就是'bcdea'
。示例 1:
输入: s = "abcde", goal = "cdeab" 输出: true示例 2:
输入: s = "abcde", goal = "abced" 输出: false
解题思路
用while循环判断,不断的将goal的左字符串加到右侧与s字符串比较,相等就返回true,如果比较完还没有相等,返回false。
解题代码
def rotateString(s: str, goal: str) -> bool:
if len(s) != len(goal):
return False
count = 0
while count <= len(goal):
temp = goal[0]
goal = goal[1::]
goal += temp
if goal == s:
return True
count+=1
return False
884. 两句话中的不常见单词
题目描述
句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。
如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。
给你两个 句子
s1
和s2
,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。示例 1:
输入:s1 = "this apple is sweet", s2 = "this apple is sour" 输出:["sweet","sour"]示例 2:
输入:s1 = "apple apple", s2 = "banana" 输出:["banana"]
解题思路
先用字符串切割切割成列表,再分两次遍历列表,数元素关系就可以了。
解题代码
def uncommonFromSentences(s1: str, s2: str) -> list[str]:
list_1 = s1.split(" ")
list_2 = s2.split(" ")
result = []
for i in list_1:
if list_1.count(i) == 1 and list_2.count(i)==0:
result.append(i)
for i in list_2:
if list_2.count(i) == 1 and list_1.count(i)==0:
result.append(i)
return result
1046. 最后一块石头的重量
题目描述
有一堆石头,每块石头的重量都是正整数。
每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为
x
和y
,且x <= y
。那么粉碎的可能结果如下:
- 如果
x == y
,那么两块石头都会被完全粉碎;- 如果
x != y
,那么重量为x
的石头将会完全粉碎,而重量为y
的石头新重量为y-x
。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回
0
。示例:
输入:[2,7,4,1,8,1] 输出:1 解释: 先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1], 再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1], 接着是 2 和 1,得到 1,所以数组转换为 [1,1,1], 最后选出 1 和 1,得到 0,最终数组转换为 [1],这就是最后剩下那块石头的重量。
解题思路
用while循环进行判断,sorted方法不改变原来列表的顺序,只需要排序,比较第一大和第二大元素的关系进行相应的操作就可以了。最后记得要判断列表是否为空,空的话直接返回0。
解题代码
def lastStoneWeight(stones: list[int]) -> int:
while len(stones) > 1:
stones_1 = sorted(stones,reverse=-1)
max_stone = stones_1[0]
sed_stone = stones_1[1]
if max_stone == sed_stone:
stones.remove(max_stone)
stones.remove(sed_stone)
elif sed_stone < max_stone:
stones.remove(max_stone)
stones.remove(sed_stone)
stones.append(max_stone-sed_stone)
if len(stones)==0:
return 0
return stones[0]