力扣刷题记录——796. 旋转字符串、884. 两句话中的不常见单词、1046. 最后一块石头的重量

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——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]

猜你喜欢

转载自blog.csdn.net/weixin_63866037/article/details/128811175