【算法】算法题-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 表示。字符 movei 表示其第 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))
相关推荐
段一凡-华北理工大学2 小时前
工业智能体:从Codex/Claude到项目实战~系列文章05:从“AI助手“到“工业智能体“:能力跃迁与落地范式
人工智能·python·claude·codex·工业智能体·高炉炼铁智能化
深蓝AI2 小时前
ContextVar 到线程池就丢了?asyncio.to_thread 和 run_in_executor 实测
python
岁月宁静3 小时前
什么是 Agent:从"会聊天"到"会做事"
人工智能·python
岁月宁静3 小时前
AI 应用开发工程师简历怎么写:HR 初筛、技术复筛、面试追问,三道关卡各看什么?
人工智能·python·面试
来让爷抱一个4 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
小肝一下6 小时前
3.基础语法(3)
python
Dream it possible!6 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊6 小时前
算法之双指针系列(一)
算法·leetcode
十二6 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
深蓝AI6 小时前
Python 子进程树:父进程被杀后,孙进程为何还在跑?
python