给定一个字符串 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的位置,然后对1~S.length() 与保存位置的距离求绝对值差,保存最小的。
class Solution(object):
def shortestToChar(self, S, C):
"""
:type S: str
:type C: str
:rtype: List[int]
"""
rs = []
pos = []
# length = len(S)
for pos_i,pos_val in enumerate(S):
if pos_val==C:
pos.append(pos_i)
print(pos)
# 用绝对值计算的方法没有想到
for i in range(len(S)):
tmp = []
for j in pos:
tmp.append(abs(i-j))
rs.append(min(tmp))
print(rs)
return rs
def main():
S = "loveleetcode"
C = 'e'
myResult = Solution()
print(myResult.shortestToChar(S,C))
if __name__ == '__main__':
main()
第二种:
"""
# method two 寻找每个字符左右相邻的C字符, 简化运算
res = []
for i in range(len(S)):
left , right = S[i-len(S)::-1].find(C) , S[i:].find(C)
# 反向,t,正向
# teelevol,t,tcode
# min(1,4)=1
if left == -1: left = 10000
if right == -1: right = 10000
res.append(min(left , right))
return res
"""