📜  精确重复K次后得到S排列的字符串(1)

📅  最后修改于: 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)$。

总结

本题为字符串题目,其思路相对简单,只需要进行字符串的遍历和判断即可。实际应用中,可以结合字符串哈希等算法进行优化,使时间复杂度更低。