【算法】算法题-20231221


这里写目录标题

  • [一、830. 较大分组的位置](#一、830. 较大分组的位置)
  • [二、657. 机器人能否返回原点](#二、657. 机器人能否返回原点)
  • [三、771. 宝石与石头](#三、771. 宝石与石头)

一、830. 较大分组的位置

在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。

例如,在字符串 s = "abbxxxxzyy"中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。

分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6] 。

我们称所有包含大于或等于三个连续字符的分组为 较大分组 。

找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。

示例1:

输入:s = "abbxxxxzzy"

输出:[[3,6]]

解释:"xxxx" 是一个起始于 3 且终止于 6 的较大分组。

示例 2:

输入:s = "abc"

输出:[]

解释:"a","b" 和 "c" 均不是符合要求的较大分组。

示例 3:

输入:s = "abcdddeeeeaabbbcd"

输出:[[3,5],[6,9],[12,14]]

解释:较大分组为 "ddd", "eeee" 和 "bbb"

示例 4:

输入:s = "aba"

输出:[]

python 复制代码
class Solution:
    def largeGroupPositions(self, s: str):
        left = 0
        right = 1

        ans = []
        n = len(s)

        while right <= n:
            # right 越界或 s[left] != s[right] 时的处理
            if right == n or s[left] != s[right]:
                if right - left >= 3:
                    ans.append([left, right - 1])
                # 注意维护更新 left
                left = right
            right += 1
        return ans

二、657. 机器人能否返回原点

在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。

移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。

如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。

注意:机器人"面朝"的方向无关紧要。 "R" 将始终使机器人向右移动一次,"L" 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。

示例 1:

输入: moves = "UD"

输出: true

解释:机器人向上移动一次,然后向下移动一次。所有动作都具有相同的幅度,因此它最终回到它开始的原点。因此,我们返回 true。

示例 2:

输入: moves = "LL"

输出: false

解释:机器人向左移动两次。它最终位于原点的左侧,距原点有两次 "移动" 的距离。我们返回 false,因为它在移动结束时没有返回原点。

python 复制代码
class Solution(object):
    def judgeCircle(self, moves):
        x = y = 0
        for move in moves:
            if move == 'U': y -= 1
            elif move == 'D': y += 1
            elif move == 'L': x -= 1
            elif move == 'R': x += 1

        return x == y == 0
a="UD"
s3=Solution()
res=s3.judgeCircle(a)
print(res)

三、771. 宝石与石头

给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

字母区分大小写,因此 "a" 和 "A" 是不同类型的石头。

示例 1:

输入:jewels = "aA", stones = "aAAbbbb"

输出:3

示例 2:

输入:jewels = "z", stones = "ZZ"

输出:0

python 复制代码
from collections import Counter

class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        stones = Counter(stones)
        return sum(stones.get(x, 0) for x in jewels)


S=Solution()
jewels = "aA"
stones = "aAAbbbb"
print(S.numJewelsInStones(jewels, stones))
相关推荐
Y1nhl1 小时前
搜广推校招面经六十四
人工智能·深度学习·leetcode·广告算法·推荐算法·搜索算法
ylfhpy2 小时前
Java面试黄金宝典30
java·数据库·算法·面试·职场和发展
灋✘逞_兇2 小时前
链表的操作-反转链表
数据结构·链表
明.2442 小时前
DFS 洛谷P1123 取数游戏
算法·深度优先
维度攻城狮4 小时前
实现在Unity3D中仿真汽车,而且还能使用ros2控制
python·unity·docker·汽车·ros2·rviz2
简简单单做算法4 小时前
基于mediapipe深度学习和限定半径最近邻分类树算法的人体摔倒检测系统python源码
人工智能·python·深度学习·算法·分类·mediapipe·限定半径最近邻分类树
hvinsion5 小时前
基于PyQt5的自动化任务管理软件:高效、智能的任务调度与执行管理
开发语言·python·自动化·自动化任务管理
Tisfy5 小时前
LeetCode 2360.图中的最长环:一步一打卡(不撞南墙不回头) - 通过故事讲道理
算法·leetcode··题解
Espresso Macchiato5 小时前
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays
leetcode·动态规划·leetcode hard·leetcode 3500·leetcode双周赛153
LuckyAnJo5 小时前
Leetcode-100 链表常见操作
算法·leetcode·链表