题目地址(821. 字符的最短距离)
https://leetcode-cn.com/problems/shortest-distance-to-a-character
题目描述
给定一个字符串 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 中的所有字母均为小写字母。
编程语言
python3
思路
0. 考察数组的遍历(正向遍历和反向遍历)
我的思路
1. 对于字符串s的每一个字符,如果该字符等于c,输出0,进行下一个循环
2. 对于字符串s的每一个字符,如果该字符不等于c,往前往后分别查找c,
- 一方找不到c,输出另一方距离
- 都找得到c,记录两个距离
3. 输出两个距离中的最小值
代码
class Solution:
def shortestToChar(self, s: str, c: str) -> List[int]:
slength = len(s)
res = []
for i in range(slength):
if s[i] == c:
res.append(0)
continue
j = i
k = i
while(s[j] != c):
j -= 1
if j < 0:
break
while(s[k] != c):
k += 1
if k >= slength:
break
la = i-j
lb = k-i
if j < 0:
res.append(lb)
elif k >= slength:
res.append(la)
else:
res.append(min(la, lb))
return res
复杂度分析
0. 时间复杂度:O(n·k),n是字符串的长度,k是查找到字符c的长度
1. 空间复杂度:O(1)
收获
在数组里查找其中一个元素 index
官方题解的方法
更好的方法