我对Python比较陌生;我编写了以下代码来查找字符串中与queries
中的索引最接近的字符,我想找到一种优化代码的方法:
示例:
输入字符串:
s = 'adarshravi'
和queries = [2, 4]
(这些是要找到其重复项的字符的索引,并且输出应具有最接近的重复项的索引,如果没有重复字符,则其输出将为-1)
上述查询的输出将是:
[0, -1]
输出说明:
对于索引2,字符串中的字符是a
,字符串中还有另外两个a's
,一个在0
索引处,另一个在索引7
处,因此这两个字符之间最接近的是0'th
位置的字符,4th
索引处的字符是{-1
def closest(s, queries):
s = s.lower()
listIdx = []
for i in queries:
foundidx = []
srchChr = s[i]
for j in range(0, len(s)):
if s[j] == srchChr:
foundidx.append(j)
if len(foundidx) < 2:
listIdx.append(-1)
else:
lastIdx = -1
dist = 0
foundidx.remove(i)
for fnditem in foundidx:
if dist == 0:
lastIdx = fnditem
dist = abs(fnditem - i)
else:
if abs(fnditem - i) < dist:
lastIdx = fnditem
dist = abs(fnditem - i)
listIdx.append(lastIdx)
return listIdx
这是通过创建带有索引的元组来实现的,如果元组中的字符相同,则比较两个索引之间差异的abs值。当创建
s_lst
时,queries
中的元组被省略,以避免与自身匹配这家伙在搜索个别物品
下面的代码从两个索引开始:一个从开始到左边,另一个从右边开始。我们不需要运行这个循环超过字符串-1的长度。当字符到达末尾或第一次找到字符时,我们返回索引。如果没有找到,我们返回-1
^{pr2}$测试如下
我们可以构造一个索引列表,例如:
这就产生了如下指数:
^{pr2}$我们可以使用上面的方法来检查最接近的字符:
然后得出:
closest
就是列表上close
函数的“映射”:例如:
相关问题 更多 >
编程相关推荐