时间限制 3000MS内存限制 589824KB题目描述 我们称一个字符串为回义串当且仅当这个串从左往右和从右往左读是一样的。例如aabbaa、a、abcba而ab、ba、abc不是回文串。注意单个字符也算是回文串。现在给你一个长度为n的字符串 S接下来需要将这个串重新排列组成一个新的字符串 T。首先T一开始为空之后进行如下操作:从左往右开始剪切 S 中开头k个字符构成的子串如果该子串是一个回文串
思路:
首先,我们需要找到所有的回文串,然后按照给定的顺序将它们拼接起来。
对于一个长度为n的字符串,我们可以将其分成n/k个长度为k的子串。我们可以从左往右遍历字符串,每次取出k个字符,判断它是否是回文串。如果是回文串,我们就将它拼接在T的前面;否则,将它拼接在T的末尾。
具体实现:
-
读入n和k,并初始化一个空串T。
-
读入字符串S。
-
从左往右遍历字符串S,每次取出k个字符。
-
判断取出的k个字符是否是回文串。如果是回文串,就将它拼接在T的前面;否则,将它拼接在T的末尾。
-
输出T。
代码实现如下:
n, k = map(int, input().split())
S = input()
T = ''
for i in range(0, n, k):
substring = S[i:i+k]
if substring == substring[::-1]:
T = substring + T
else:
T += substring
print(T)
复杂度分析:
由于需要遍历字符串S,并对每个长度为k的子串进行判断,所以时间复杂度为O(n/k * k) = O(n)。
空间复杂度为O(n),用于存储结果T
原文地址: http://www.cveoy.top/t/topic/iyVq 著作权归作者所有。请勿转载和采集!