LeetCode-Repeated Substring Pattern

本文探讨了一种算法,用于判断一个非空字符串是否能通过其子串的多次重复构成。通过对子串长度从1到字符串长度一半的遍历,检查是否能通过重复构成原字符串,提供了Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description:
Given a non-empty string check if it can be constructed by taking a substring of it and appending multiple copies of the substring together. You may assume the given string consists of lowercase English letters only and its length will not exceed 10000.

Example 1:

Input: "abab"
Output: True
Explanation: It's the substring "ab" twice.

Example 2:

Input: "aba"
Output: False

Example 3:

Input: "abcabcabcabc"
Output: True
Explanation: It's the substring "abc" four times. (And the substring "abcabc" twice.)

题意:给定一个字符串S,判断这个字符串是否可以由字串重复n此获得;

解法:我们从子串sub长度为1一直遍历到长度为S.length() / 2;因为子串不可以同S相同,所以字串的最大长度为S.length() / 2;得到这个字串之后,我们就知道了这个字串需要重复的次数为S.length() / sub.length()(对不能整除的不作考虑);

Java
class Solution {
    public boolean repeatedSubstringPattern(String s) {
        for (int len = 1; len <= s.length() / 2; len++) {
            String str = s.substring(0, len);
            if (s.length() % str.length() != 0) {
            	continue;
            }
            if (repeatedSubstring(str, s.length() / str.length()).equals(s)) {
            	return true;
            }
        }
        return false;
    }
    
    //将字符串重复n次,返回一个新的字符串
    private String repeatedSubstring(String s, int n) {
        return String.join("", Collections.nCopies(n, s));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值