7.重复的字符串

题目描述:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。

示例 1:
输入: “abab”
输出: True
解释: 可由子字符串 “ab” 重复两次构成。
示例 2:
输入: “aba”
输出: False
示例 3:
输入: “abcabcabcabc”
输出: True
解析:
1.去头加去尾拼接
①去除输入字符串的头字符拼接一个去除尾字符的字符串;
②判断拼接后的字符串中是否还含有原字符

public boolean repeatedSubstringPattern(String str){
      //判读输入合法性
      if (str == null || str.length() == 0)
       return false;
      //将str去头与str去尾拼接起来
      StringBuilder sb = new StringBuilder();
      sb.append(str.substring(1, str.length()));
      sb.append(str.substring(0, str.length()-1));
      //判断拼接后的字符串是否含有str
      //abcabc-->拼接后-->bcabcabcab
      if (sb.toString().contains(str))
         return true;
      return false;
     }

2.等份相加(时间复杂度过高)
①将字符串拆成2~str.length()份;
②每拆一次,均取出第0份,重复拼接该份字符串;
③如果拼接后的字符串等于原字符串,则返回true,否则返回false。

public boolean repeatedSubstringPattern2(String str){
     //判读输入合法性
      if (str == null || str.length() == 0)
       return false;
      //将字符串拆成i份,从2到str.length()
      for (int i = 2; i <= str.length(); i++){
       //将第一份作为子串重复拼接i份
       StringBuilder sb = new StringBuilder();
       for (int j = 0; j < i; j++){
        sb.append(str.substring(0, str.length()/i));
       }
       //如果拼接后的字符串等于str,则返回true
       if (sb.toString().equals(str))
         return true;
      }
      return false;
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值