题目描述:
给定一个字符串 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中的所有字母均为小写字母。
解题思路:分三步进行、
- 处理字符串S查找到字符C之前的部分。
- 处理S中间每两个C之间的部分。
- 处理最后一个字符C到字符串S最后的部分。
代码实现:
class Solution:
def shortestToChar(self, S: str, C: str) -> List[int]:
li = []
pos1 = S.find(C)
# 处理字符串S查找到字符C之前的部分
for i in range(pos1):
li.append(pos1 - i)
pos2 = 0
# 处理S中间每两个C之间的部分,注意这里pos2不能为-1,否则会出现错误
while pos2 < S.rfind(C) and pos2 != -1:
pos2 = S.find(C, pos1 + 1, len(S))# 这里pos2可能返回-1,要在循环条件里排除
print("pos1 = ", pos1, "pos2 = ", pos2)
for i in range(pos1, pos2):
if (i - pos1) <= pos2 - i:
li.append(i - pos1)
else:
li.append(pos2 - i)
pos1 = pos2
# 处理最后一个字符C到字符串S最后的部分。
if S.rfind(C) <= len(S) - 1:
for i in range(S.rfind(C), len(S)):
li.append(i - S.rfind(C))
return li
关注我的公众号免费领取海量python学习资料!!!


本文介绍了一种算法,用于解决给定字符串S和字符C时,如何计算S中每个字符到C的最短距离。通过三个步骤处理,算法能有效解决此问题。
1231

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



