leedcode-重复的子字符串

自己写的:

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        # 获取字符串的长度
        n = len(s)

        # 初始化指针指向字符串的最后一个字符
        rptr = n - 1

        # 在指针到达字符串的第一个字符之前循环
        while rptr > 0:
            # 向左移动指针,直到找到一个与第一个字符相同的字符
            while s[rptr] != s[0]:
                rptr -= 1
                # 如果指针在找到匹配字符之前到达字符串的开头,返回False
                if rptr == 0:
                    return False

            # 从当前指针到字符串末尾提取一个潜在的子字符串
            sonStr = s[rptr:n]
            # 获取潜在子字符串的长度
            sonStr_len = len(sonStr)
            # 计算潜在子字符串重复多少次可以覆盖整个字符串
            times = n // sonStr_len

            # 如果潜在子字符串重复'times'次后长度不等于原始字符串长度,继续往左移动指针并尝试下一个子字符串
            if len(sonStr * times) != n:
                rptr -= 1
                continue

            # 检查潜在子字符串重复'times'次是否等于原始字符串
            if sonStr * times == s:
                return True
            else:
                # 如果不是,则向左移动指针并继续检查
                rptr -= 1

        # 如果没有找到重复的子字符串模式,则返回False
        return False

如果一个字符串可以由一个子字符串重复多次构成,那么将这个字符串与自身连接后形成的字符串中,去掉首尾字符后仍然会包含原始字符串。

class Solution {
    // 这个函数检查给定的字符串 s 是否可以通过重复子字符串来形成。
    public boolean repeatedSubstringPattern(String s) {
        // 将给定的字符串与自身连接起来,形成一个新的字符串。
        String str = s + s;
        // 检查连接后的字符串(去除第一个和最后一个字符)是否包含原始字符串 s。
        return str.substring(1, str.length() - 1).contains(s);
    }
}

 

posted @ 2024-05-08 18:07  Junior_bond  阅读(3)  评论(0编辑  收藏  举报