美文网首页算法提高之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