如何比较同一字符串中不同长度的部分?

时间:2019-05-25 17:53:58

标签: python python-3.x string

我需要创建一个函数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循环来分析字符串,存储代表距离的数字然后返回最大距离(这是最大距离)方面,我遇到了一些麻烦。

注意:我无法导入任何模块

1 个答案:

答案 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