如何获得数组中某个对象的最短重复?

2024-05-18 18:57:28 发布

您现在位置:Python中文网/ 问答频道 /正文

假设您有一个列表,它只有两种类型的值,类似于['t','r','r','r','t','t','r','r','t'],您希望找到两端都有't''r'的最小序列号的长度

在这种情况下,'r'的最小序列的长度为2,因为首先是t,r,r,r,t,然后是t,r,r,t,,而后者在被't'包围的行中具有最小的'r'数,'r'数为2

我该如何编码才能找到那个号码

这是因为你想和你的朋友一起去看戏,你想和你的朋友坐得尽可能近,所以你想在一场戏的两个空闲座位之间找到最少的座位。“#”是有人坐的座位,“.”是空座位。您将获得座位数量和座位安排(免费座位和有人坐的座位),它们都在一行中。 输入的一个例子是:

5
#.##.

在两个空闲座位之间有两个有人坐的座位

这是我的代码,它不是为我不知道的输入工作,而是为我抛出的输入工作

import sys

seats = int(input())
configuration = input()
seatsArray = []
betweenSeats = 1
betweenSeatsMin = 1
checked = 0
theArray = []
dotCount = 0
for i in configuration:
  seatsArray.append(i)

for i in range(len(seatsArray)):
  if i == len(seatsArray) - 1:
    break
  if seatsArray[i] == "." and seatsArray[i+1] == ".":
    print(0)
    sys.exit()

for i in range(0,len(seatsArray)):
  if i > 0:
    if checked == seats:
      break
  checked += 1
  if seatsArray[i] == "#":
    if i > 0:
      if seatsArray[i-1] == "#":
        betweenSeats += 1

  if seatsArray[i] == ".":
    dotCount += 1
    if dotCount > 1:
      theArray.append(betweenSeats)
    betweenSeats = 1

theArray = sorted(theArray)
if theArray.count(1) > 0:
  theArray.remove(1)
theArray = list(dict.fromkeys(theArray))

print(theArray[0])

Tags: inforinputlenifsys朋友空闲
2条回答

这是一个无稽之谈!使用最小和最大序列的计数器来解决问题的最佳方法,ew将两者进行比较并返回最小值

''' create a funciton that
    will find min sequence
    of target char
    in a list'''
    
def finder(a, target):
    max_counter = 0
    min_counter = 0

    ''' iterate through our list
    and if the element is the target
    increase our max counter by 1 
    '''
    for i in x:
        if i == target:
            max_counter += 1
            
            '''min here is 0
            so it will always be less
            so we overwrite it's value
            with the value of max_counter'''
            if min_counter < max_counter:
                min_counter = max_counter

            '''at last iteration max counter will be less than min counter
            so we overwrite it'''
            if max_counter < min_counter:
                min_counter = max_counter
    
        else:

            max_counter = 0
    return min_counter


x = ['t','r','r','r','t','t','r','r','t','t','t','r','t'] 
y = 'r'
print(finder(x,y))

从列表中创建一个字符串,然后搜索所需的模式,然后在找到的匹配项中计算r,然后取最小值 代码:

import re
lst = ['t','r','r','r','t','t','r','r','t']
text = ''.join(lst)
pattern = '(?<=t)r+(?=t)'
smallest_r_seq = min(match.group().count('r') for match in re.finditer(pattern, text))
print(smallest_r_seq)

输出:

2

相关问题 更多 >

    热门问题