📜  算法测验| SP2竞赛1 |问题2(1)

📅  最后修改于: 2023-12-03 15:27:26.317000             🧑  作者: Mango

算法测验 | SP2竞赛1 | 问题2

在 SP2竞赛1 中,问题2要求编写一个程序,输入一个字符串和一个整数 k ,输出所有长度为 k 的连续子串中,相同字符数量最多的子串。

程序实现

首先,我们需要读取输入的字符串和整数 k:

string = input()  # 读取输入字符串
k = int(input())  # 读取整数 k

接下来,我们需要一个函数来计算一个字符串中,最长的相同字符数量是多少:

def max_same_char(string):
    max_length = 1
    curr_length = 1
    for i in range(1, len(string)):
        if string[i] == string[i-1]:
            curr_length += 1
        else:
            max_length = max(max_length, curr_length)
            curr_length = 1
    return max(max_length, curr_length)

该函数遍历字符串,如果当前字符和前一个字符相同,就将当前的连续相同字符数量加一。如果当前字符和前一个字符不同,就比较当前的连续相同字符数量和最大值,并将当前连续相同字符数量重置为1。最后,函数返回最大值。

接下来,我们需要遍历所有长度为 k 的子串,并找到其中相同字符数量最多的子串:

max_count = 0  # 最大相同字符数量
max_substring = ''  # 最大相同字符数量的子串
for i in range(len(string)-k+1):
    sub_string = string[i:i+k]  # 当前的子串
    count = max_same_char(sub_string)  # 当前子串的相同字符数量
    if count > max_count:
        max_count = count
        max_substring = sub_string

该代码使用嵌套循环来遍历所有长度为 k 的子串。对于每个子串,使用上一步中实现的 max_same_char 函数来计算相同字符数量。如果当前子串的相同字符数量大于之前所有子串的最大值,就记录该子串和相同字符数量。

最后,输出相同字符数量最多的子串即可:

print(max_substring)
完整代码

以下是完整的Python实现代码:

def max_same_char(string):
    max_length = 1
    curr_length = 1
    for i in range(1, len(string)):
        if string[i] == string[i-1]:
            curr_length += 1
        else:
            max_length = max(max_length, curr_length)
            curr_length = 1
    return max(max_length, curr_length)


string = input()
k = int(input())

max_count = 0
max_substring = ''
for i in range(len(string)-k+1):
    sub_string = string[i:i+k]
    count = max_same_char(sub_string)
    if count > max_count:
        max_count = count
        max_substring = sub_string

print(max_substring)
总结

本文介绍了在 SP2竞赛1 中,问题2的解题思路和具体实现。通过实现一个函数来计算一个字符串中最长的相同字符数量,再使用循环和字符串切片来遍历所有长度为 k 的子串,最终找到相同字符数量最多的子串并输出。