力扣(leetcode)第821题字符的最短距离(Python)

821.字符的最短距离

题目链接:821.字符的最短距离

给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。

返回一个整数数组 answer ,其中 answer.length == s.length 且 answeri 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。

两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。

示例 1:

输入:s = "loveleetcode", c = "e"

输出:3,2,1,0,1,0,0,1,2,2,1,0

解释:字符 'e' 出现在下标 3、5、6 和 11 处(下标从 0 开始计数)。

距下标 0 最近的 'e' 出现在下标 3 ,所以距离为 abs(0 - 3) = 3 。

距下标 1 最近的 'e' 出现在下标 3 ,所以距离为 abs(1 - 3) = 2 。

对于下标 4 ,出现在下标 3 和下标 5 处的 'e' 都离它最近,但距离是一样的 abs(4 - 3) == abs(4 - 5) = 1 。

距下标 8 最近的 'e' 出现在下标 6 ,所以距离为 abs(8 - 6) = 2 。
示例 2:

输入:s = "aaab", c = "b"

输出:3,2,1,0

提示:

1 <= s.length <= 104

si 和 c 均为小写英文字母

题目数据保证 c 在 s 中至少出现一次

解答

python 复制代码
class Solution:
    def shortestToChar(self, s: str, c: str) -> List[int]:
        n = len(s)
        ans = [0] * n
        idx = -n
        for i, ch in enumerate(s):
            if ch == c:
                idx = i
            ans[i] = i - idx
        idx = 2 * n
        for i in range(n - 1, -1, -1):
            if s[i] == c:
                idx = i
            ans[i] = min(ans[i], idx - i)
        return ans

最后,我写了一篇MySQL教程,里面详细的介绍了MySQL的基本概念以及操作指令等内容,欢迎阅读!
MySQL数据库万字保姆级教程

相关推荐
折哥的程序人生 · 物流技术专研17 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
xxie12379417 小时前
return与print
开发语言·python
秋917 小时前
从 Python 后端工程师转型 AI Engineer(AI 工程化)的完整补课清单(2026实战版)
开发语言·人工智能·python
程序员二叉17 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
慕木沐18 小时前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
想吃火锅100518 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
Tbisnic18 小时前
AI大模型学习第十一天:技术选型、安全防护与金融实战
python·学习·ai·大模型·提示词工程
Roann_seo%18 小时前
C++文件操作完全指南:从文本读写到二进制文件处理
开发语言·c++
JohnnyDeng9418 小时前
【Android】Hilt 依赖注入:原理与最佳实践
android·kotlin·mvvm·hilt
hboot19 小时前
AI工程师第一课 - Python
前端·后端·python