近期一直在用python刷leetcode的题,代码都提交到了github上了:https://github.com/Teingi/test
给定一个字符串 S
和一个字符 C
。返回一个代表字符串 S
中每个字符到字符串 S
中的字符 C
的最短距离的数组。
示例 1:
输入: S = "loveleetcode", C = 'e'
输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
说明:
- 字符串
S
的长度范围为[1, 10000]
。 C
是一个单字符,且保证是字符串S
里的字符。S
和C
中的所有字母均为小写字母。
思路:
第一步:遍历一次把C在S中的索引全部找出;
第二步:遍历一次S,同时遍历到每一个元素时都让这个元素的索引减去List中的所有值,求绝对值最小。
时间复杂度:O(n)
class Solution(object):
def shortestToChar(self, S, C):
"""
:type S: str
:type C: str
:rtype: List[int]
"""
List = self.indexChar(S,C)
result = []
for i in range(len(S)):
result.append(min(abs(i-k) for k in List))
return result
def indexChar(self,S,C):
"""
找出S中C的所有下标索引
"""
res = []
if len(S) == 0 or (C not in S):
return -1
for i in range(len(S)):
if S[i] == C:
res.append(i)
return res