给出一个可能多次出现相同字符的字符串,返回该字符串中任何指示字符的最接近相同字符。
给出查询的字符串数s
和n
。在每个查询中,将为您提供一个字符的索引a
(其中0 <= a <= |s|
),并且需要打印同一字符的壁橱索引。如果有多个答案,请打印最小的答案。否则,请打印-1
。
例如,字符串s = 'youyouy'
,具有给定查询3
:在索引0和6处有两个匹配的字符,每个3个字符,我们选择最小的一个,即0。
这是我的计划: 我把字符串放在字典中,键是字符串中不同的字母,值是字母对应的索引。当给出查询时,在字典中找到相应的字母并返回最接近查询的值。
def closest(s, queries):
res = []
dict2={}
#dict2 - letter - indexs
for i in range(len(s)):
if s[i] not in dict2:
dict2[s[i]]=[i]
else:
dict2[s[i]].append(i)
for num in queries:
#closet- denotes closet letter index
closet = math.inf
#num is out of range , append -1
if num > (len(s)-1):
res.append(-1)
continue
#this is the only one letter, append -1
letter=s[num]
if len(dict2[letter])==1:
res.append(-1)
continue
#temp = list for that letters
temp=dict2[s[num]]
index=temp.index(num) . #in the list, letter index's index in list
if index==0:
closet=temp[1]
elif index==(len(temp)-1):
closet=temp[index-1]
else:
distance1=num-temp[index-1] . #left
distance2=temp[index+1]-num . #right
if distance1 <= distance2:
closet=temp[index-1]
else:
closet=temp[index+1]
if closet == math.inf:
res.append(-1)
else:
res.append(closet)
return res
我遇到两个运行时错误。我想知道您是否可以帮助我减少一些运行时间?
此外,我还在寻找其他建议!我已经使用Python一段时间了,并且正在寻找工作(大学新毕业生)。 Java运行速度通常比Python快吗?我应该切换到Java吗?
答案 0 :(得分:0)
我正在尝试尽可能简单地做,但是我看起来有点复杂。尽管您的问题是避免运行时错误,但我想提出我的想法
s='oooyyouoy'
k='0123456789'
def cloest(string,pos):
c = string[pos]
p1 , p2 = s[:pos] , s[pos+1:]
# reserve left part and find the closet one , add 1 because len(p1)=final_position + 1
l = len(p1) - (p1[::-1].find(c) + 1)
# find without reserve and add 1 because s[pos+1:]
r = (p2.find(c) + 1) + pos
# judge which one is closer if same chose left one
result = l if (pos - l) <= (r - pos) else r
if result == pos:
return -1
else:
return result
print(cloest(s,4))