美文网首页算法提高之LeetCode刷题算法
821. 字符的最短距离(Python)

821. 字符的最短距离(Python)

作者: 玖月晴 | 来源:发表于2019-05-28 15:45 被阅读0次

题目

难度:★★☆☆☆
类型:字符串

给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。

说明
字符串 S 的长度范围为 [1, 10000]。
C 是一个单字符,且保证是字符串 S 里的字符。
S 和 C 中的所有字母均为小写字母。

示例

输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]

解答

我们可以用两步解决这个问题:

  1. 找到字符C在字符串S中出现的所有位置,将这些位置组成列表cids;

  2. 再次遍历S字符串,求取当前位置sid与cids中每个元素cid的距离,并求其最小值,作为当前位置到字符C的最短距离。

class Solution:
    def shortestToChar(self, S, C):
        cids = []
        for i in range(len(S)):
            if S[i] == C:
                cids.append(i)

        res = []
        for sid in range(len(S)):
            min_dist = min([abs(cid-sid) for cid in cids])
            res.append(min_dist)

        return res

紧凑写法:

class Solution:
    def shortestToChar(self, S, C):
        cids = [i for i, s in enumerate(S) if s == C]
        return [min([abs(sid-cid) for cid in cids]) for sid in range(len(S))]

如有疑问或建议,欢迎评论区留言~

相关文章

网友评论

    本文标题:821. 字符的最短距离(Python)

    本文链接:https://www.haomeiwen.com/subject/qgedtctx.html