

可以使用两次遍历的方法:
-
从左到右遍历,记录
c出现的位置,并计算距离。 -
从右到左遍历,再次更新距离,确保每个位置的距离是最小的。
Python 实现如下:
def shortestToChar(s: str, c: str):
n = len(s)
answer = [float('inf')] * n # 初始化为无穷大
# 从左往右遍历
prev = float('-inf')
for i in range(n):
if s[i] == c:
prev = i
answer[i] = abs(i - prev)
# 从右往左遍历
prev = float('inf')
for i in range(n - 1, -1, -1):
if s[i] == c:
prev = i
answer[i] = min(answer[i], abs(i - prev))
return answer
# 示例
s = "loveleetcode"
c = "e"
print(shortestToChar(s, c)) # 输出: [3,2,1,0,1,0,0,1,2,2,1,0]
复杂度分析:
-
两次遍历,时间复杂度:O(n)
-
额外的
answer数组,空间复杂度:O(n)
这样保证了每个位置的 c 距离都是最小的。
446

被折叠的 条评论
为什么被折叠?



