📅  最后修改于: 2023-12-03 15:41:10.896000             🧑  作者: Mango
给定一个字符串 S 和一个正整数 K,你需要判断是否存在一个长度为 K 的非空字符串,重复 K 次可以得到字符串 S。
若字符串 S 的长度为 n,如果存在一个长度为 K 的非空字符串,重复 K 次可以得到字符串 S,那么必须满足 n 是 K 的倍数,并且 S 可以被分割成 K 个相等的部分。
举个例子,如果 S="abcabcabc",K=3,那么就可以把 S 分割成 "abc"、"abc"、"abc" 三个部分,每个部分都是长度为 3 的字符串。
因此,问题可以简化为判断字符串 S 能否被分割成 K 个相等的部分。
以下是 Python 代码实现:
def has_substr_repeated_K_times(S: str, K: int) -> bool:
n = len(S)
if n % K != 0:
return False
substr_len = n // K
for i in range(0, n, substr_len):
if S[i:i+substr_len] != S[0:substr_len]:
return False
return True
时间复杂度:$O(n)$,其中 n 是字符串 S 的长度。
空间复杂度:$O(1)$。
本题为字符串题目,其思路相对简单,只需要进行字符串的遍历和判断即可。实际应用中,可以结合字符串哈希等算法进行优化,使时间复杂度更低。