1.问题描述

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

来自 https://leetcode.com/problems/repeated-substring-pattern/description/

2.题目分析

给定一个非空字符串,检测这个字符串是否可以由它的一个子串通过拼接构造出来,即判断字符串的周期性。通过find函数找出第一个和和s[0]相同的位置,假设这个位置gap是周期,再通过isminsubstr函数判断字符串是否是这个周期的,若函数返回true,则结束,返回true,否者再通过find寻找下一个可能的周期。其中isminsubstr函数用于判断字符串是否具有周期gap,判断的方法是首先这个字符串长度必须是gap的整数倍,其次,各个位置的字符必须周期重复。

3.C++代码

//我的代码:(beats 39%)
bool isminsubstr(string s, int gap)//判断s是否具有周期gap
{int L = s.length();if(L%gap != 0)//长度不是gap的整数倍return false;for(int start=0;start<gap;start++)for (int i = start+gap; i < L; i=i+gap){if (s[start] != s[i])//不满足周期重复return false;}return true;
}
bool repeatedSubstringPattern(string s)
{int L = s.length();int gap = s.find(s[0],1);//假设的最小周期if (gap == -1)return false;while (gap < L&&gap!=-1){if (isminsubstr(s, gap))return true;elsegap= s.find(s[0], gap+1);//寻找下一个周期}return false;
}
//别人家的代码
bool repeatedSubstringPattern2(string str)
{int i = 1, j = 0, n = str.size();vector<int> dp(n+1,0);while (i < str.size()){if (str[i] == str[j])dp[++i] = ++j;else if (j == 0)++i;elsej = dp[j];}return dp[n] && ((dp[n] % (n - dp[n])) == 0);
}
//基本思路

4.string类的compare函数

在C++中使用std::string编写字符串相关操作时,经常使用find方法,但在有些场景下需要判断字符串是否相同,因而需要使用compare方法。下面是用法测试:

#include <string>
#include <iostream> using namespace std;
int main(int argc, char* argv[])
{string str1("abc");string str2("abcabcabc");if (str1.compare("abc") == 0)cout << str1 << " is abc!" << endl;if (str1.compare(str2) != 0)cout << str1 << " is not " << str2 << endl;if (str2.compare(6, 3, "abc") == 0)cout << str2 << " 'index from 6 about 3char is abc!" << endl;if (str2.compare(0,3, str1) == 0)cout << str2 << " 'index from 0 about 3char is equal str1!" << endl;if (str2.compare(6, 3, str1, 0, 3) == 0)cout << str2 << " 'index from 6 about 3char is equal str1'index from 0 about 3char!" << endl;return 0;
}

459. Repeated Substring Pattern相关推荐

  1. LeetCode 459. Repeated Substring Pattern

    题目: Given a non-empty string check if it can be constructed by taking a substring of it and appendin ...

  2. 459. Repeated Substring Pattern 重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab"输出: True解释: ...

  3. Java构造字符串算法题_LeetCode算法题-Repeated Substring Pattern(Java实现)

    这是悦乐书的第236次更新,第249篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第103题(顺位题号是459).给定非空字符串检查是否可以通过获取它的子字符串并将子字符 ...

  4. C#LeetCode刷题之#459-重复的子字符串(Repeated Substring Pattern)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3945 访问. 给定一个非空的字符串,判断它是否可以由它的一个子串 ...

  5. 0459-Repeated Substring Pattern(重复的子字符串)

    这个系列算是出于个人兴趣开的一个新坑吧,最近看到同学刷LeetCode算法题,就想写写那些可以一行Python代码写出来的题目,因此本专栏的文章的解题方式效率不做保证,只为追求"一行的浪漫& ...

  6. Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)

    因为只能交换一次,先考虑如果不交换最大的值. 接下来考虑交换,有四种情况 ① aaabaaa型 交换一下可以将相邻的两块连在一起,答案就是两块长度之和 ② aaabbbaaaa 交换一下也不能连起两块 ...

  7. ZOJ 3199 Longest Repeated Substring

    转载请注明出处:http://blog.csdn.net/drecik__/article/details/7409101 /* * 套用大神的后缀数组模板做的; * 不过第一次还是很SB的TLE了一 ...

  8. python基础刷题_数据结构与算法LeetCode刷题(Python)

    参考资料: 一.链表 1.  链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2.  链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...

  9. LeetCode 简单算法题

    使用Nodejs 抓取的LeetCode 简单算法题  一步一步来,先攻破所有简单的题目,有些题目不适合使用JS解决,请自行斟酌 Letcode 简单题汇总 104. Maximum Depth of ...

最新文章

  1. webstorm打开新项目提示设置、是否在新窗口打开提示
  2. 准备 KVM 实验环境 - 每天5分钟玩转 OpenStack(3)
  3. Openshift 4.4 静态 IP 离线安装系列:初始安装
  4. RDS数据库通过内网导出到其他RDS实例和ESC上的MYSQL数据库(新手运维)
  5. jq处理返回来json_(转)JQuery处理json与ajax返回JSON实例
  6. Spring框架----四种常用通知类型
  7. linux添加Mib库,Linux SNMP中的管理信息库(MIB)学习
  8. 网页微信协议分析(一)——登录
  9. Java 基础【01】 This 用法
  10. java中null+和null+null的深入理解
  11. ios入门之消息推送详解
  12. Linux服务器中查询IP地址五个方法
  13. 易基因-【直播预告】国自然热门选题 - 博士后带你了解m6A RNA甲基化
  14. 手机的尺寸、分辨率、像素密度的关系
  15. 宝付国际一文读懂:跨境电商的外汇风险敞口(一)
  16. python解决跨域_Python | 跨域
  17. DNA甲基化数据分析专题
  18. vue + prerender + html-webpack-plugin 打包商桥项目报错
  19. 数据挖掘中的分类与预测
  20. 计算机外文文献论文翻译,外文文献+翻译--计算机专业论文

热门文章

  1. 简述我国进一步完善分税制改革的基本思路
  2. linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数
  3. 如何访问kubernetes API?
  4. RC延时电路的 时间常数 和 延时时间(电压达到时间)和电容充放电时间计算和选取
  5. python能不能互动执行_细思恐极,插上U盘就开始执行Python代码
  6. Calendar时间操作类获取周一到周末
  7. 基于Neo4j的关联数据评估风险投资人业绩
  8. IIS打开aspx文件
  9. 动态图片怎么做?教你一键合成gif动图
  10. Concat和Add操作