给定一个字符串 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
中的所有字母均为小写字母。
思路:
先用一个数组record记录下S中所有字符C的下标,
然后线性扫描S,如果当前元素不是C,就在record里二分查找当前元素下标i离record中元素最近的距离,res中加入返回值
如果当前元素就是C,直接在res里插入0即可。
class Solution(object):
def shortestToChar(self, S, C):
"""
:type S: str
:type C: str
:rtype: List[int]
"""
record = []
for i, char in enumerate(S):
if char == C:
record.append(i)
# print record
res = []
for i, char in enumerate(S):
if char != C:
res.append(self.findClosestC(i, record))
else:
res.append(0)
return res
def findClosestC(self, i, record):
left = 0
right = len(record) - 1
while(left < right and left + 1 != right):
mid = left + (right - left) / 2
# print i,mid
if record[mid] > i:
right = mid
if record[mid] < i:
left = mid
return min(abs(record[left] - i), abs(record[right] - i))