【算法】算法题-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))
相关推荐
挨踢诗人几秒前
天猫(淘宝开放平台)集成金蝶云星空
python·数据集成
洛水水6 分钟前
【力扣100题】83.最小栈
算法·leetcode·职场和发展
无忧.芙桃8 分钟前
数据结构之栈
c语言·开发语言·数据结构
xyz_CDragon8 分钟前
把旧电脑变成AI算力:llama.cpp RPC 局域网分布式推理验证与实战
人工智能·分布式·python·rpc·llama
lulu121654407811 分钟前
GPT-5.6 vs Claude Fable 5/Mythos 深度技术对比:kindle/kepler/Levi三版本实测全解析
java·人工智能·python·gpt
喵叔哟12 分钟前
Week 3 --Day 2:LangGraph 进阶
python·langchain
装不满的克莱因瓶13 分钟前
自然语言处理中的词嵌入——从离散符号到语义向量空间
人工智能·python·深度学习·ai·自然语言处理·nlp
蜂蜜黄油呀土豆14 分钟前
Reflexion:让 Agent 用「言语」做强化学习
python·ai·大模型·reflexion
nice_lcj52015 分钟前
排序(3)-第三篇:交换排序专题——从冒泡排序到快速排序的效率飞跃
java·数据结构·算法·排序算法
搬石头的马农16 分钟前
御三家旗舰模型混战下的企业选型策略:GPT-5.6、Fable 5、Gemini 3.5 Pro 怎么选? - 微元算力(weytoken)
java·人工智能·python·gpt·ai编程