459. Repeated Substring Pattern(python+cpp)

题目:

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.)

解释:
对于这种重复的问题,就考虑复制,把原字符串复制一遍拼接在其后得到新字符串,如果新的字符串的子字符串[1::1]中能找到原字符串,就返回true,否则返回false。
解释:
因为如果是重复的模式,那么再开头截掉一个重复单元拼接到后面,一定和原字符串相等,但是我们无需做裁剪和拼接,直接复制原字符串就完成了类似的操作。
python代码:

class Solution(object):
    def repeatedSubstringPattern(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if not s:
            return False
        ss=s+s
        return ss[1:-1].find(s)!=-1

c++代码:

class Solution {
public:
    bool repeatedSubstringPattern(string s) {
        string ss=s+s;
        string sub=ss.substr(1,ss.size()-2);
        return sub.find(s)!=string::npos;
    }
};

总结:
注意要去掉ss的第一个字符和最后一个字符,如果不去掉的话,一定能在ss中找到s的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值