版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kobe_academy/article/details/88250237
题目描述:
给定一个字符串 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学习资料!!!