LeetCode821

本题注意点:

  1、利用index()查找,可能找不到时要用try语句;    

  2、查找所有值为x的indexes,可以用内置函数enumerate(),详见version2;

  3、version3用动态规划,效率更高。

import numpy as np

def shortestToChar(S, C):
    """
    :type S: str
    :type C: str
    :rtype: List[int]
    """
    T = S
    indexes = []
    while(True):
        try:
            cur = T.index(C)
            if len(indexes) == 0:
                indexes.append(cur)
            else:
                indexes.append(indexes[-1]+cur+1)
            T = T[cur+1:]
        except:
            break
    ans = []
    for i in range(len(S)):
        j = 0
        while(j < len(indexes) and indexes[j] < i):
            j += 1
        if j == 0:
           ans.append(indexes[j]-i)
        elif j == len(indexes):
            ans.append(i-indexes[j-1])
        else:
            ans.append(min(indexes[j]-i, i-indexes[j-1]))
    return ans
    
    # version2:
    # pos = [i+1 for i,e in enumerate(S) if e == C]
    # a = []
    # outs = []
    # for i in range(1,len(S)+1):
    #     a = [abs(i-j) for j in pos]
    #     outs.append(min(a))
    # return outs
    
    # version3:
    # n = len(S)
    # result = [0 if ch == C else n for ch in S]
    #
    # for i in xrange(1, n):
    #     result[i] = min(result[i - 1] + 1, result[i])
    # for i in xrange(n - 2, -1, -1):
    #     result[i] = min(result[i + 1] + 1, result[i])
    # return result

S = "loveleetcode"
C = 'e'
print(shortestToChar(S, C))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值