我需要创建一个函数my_fun
,该函数给出仅由两个字符msg
和'o'
组成的字符串'x'
,返回最大的n
在字符串n
中,'x'
彼此之间n
等距msg
处存在。
print ( my_fun('xox') )
输出:2,因为在距离x(2)处有两个x
print ( my_fun('ooxoxxxoooxxxoxo') )
输出:4,因为在距离x(4)处有四个x
在解决如何嵌套两个for循环来分析字符串,存储代表距离的数字然后返回最大距离(这是最大距离)方面,我遇到了一些麻烦。
注意:我无法导入任何模块
答案 0 :(得分:0)
这不是最聪明的方法,但是它不会嵌套for-loop。
尝试获得最高的n, 并获得位置,如果存在彼此相邻的位置,则从总数中减去重复的x。
def my_func(msg):
length_dict = {}
pos_dict = {}
split_x = msg.split('x')
for ind, val in enumerate(split_x):
if val != '' and ind != len(split_x) -1 and ind != 0:
length_dict[val] = length_dict.get(val, 0) + 1
if val not in pos_dict.keys():
pos_dict[val] = [ind]
else:
pos_dict[val].append(ind)
# sort dictionary
sorted_dict = sorted(length_dict.items(), key=lambda x: x[1], reverse=True)
maxO = 0
for key, val in length_dict.items():
if val > maxO:
maxO = val
# should have same length
topPos = [ pos_dict[i[0]] for i in sorted_dict if i[1] == maxO]
unpack = sorted([j for i in topPos for j in i])
prev = unpack[0]
countgap = 0
for i, v in enumerate(unpack):
if i != 0:
if v - prev == 1:
countgap += 1
prev = v
count_x = 2*len(unpack) - countgap
return count_x
一些结果:
msg1 = 'xox' # 2 x
msg2 = 'ooxoxxxoooxxxoooxoxo' # 7 x
msg3 = 'xooxoooxxoooxoox' # 6 x
msg4 = 'xooxxoox' # 4 x
msg5 = 'xooxoox' # 3 x
msg6 = 'oxoxxo' # 2 x
msg7 = 'oxxoxoxox' # 4 x
msg8 = 'oxoxoxox' # 4 x
msg9 = 'ooxoxxxoooxxxoxo' # 4x