首页 > 其他分享 >[leetcode] 字符串 重复的子字符串

[leetcode] 字符串 重复的子字符串

时间:2024-07-17 22:10:07浏览次数:23  
标签:string 重复 s1 next int 字符串 leetcode size

题目:
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

代码:
思路1 (暴力算法):省略
思路2 (移动匹配):
两个重复的字符串,肯定能组成一个新的s

代码
 bool repeatedSubstringPattern(string s) {
        string s1 = s + s;
        s1.erase(s1.begin());
        s1.erase(s1.begin()+(s1.size()-1));
        if( s1.find(s) == std::string::npos ) return false;
        return true;
 }
思路3 (KMP算法): 通过next数组特性去解决该问题。最大前缀 == 最大后缀,如果是重复字符串组成的。取余的话,是0;
点击查看代码
class Solution {
public:
    void getNext (int* next, const string& s){
        next[0] = 0;
        int j = 0;
        for(int i = 1;i < s.size(); i++){
            while(j > 0 && s[i] != s[j]) {
                j = next[j-1];
            }
            if(s[i] == s[j]) {
                j++;
            }
            next[i] = j;
        }
    }
   bool repeatedSubstringPattern(string s) {
        int next[s.size()];
        getNext(next, s);
        int  len = s.size();
        for(int i = 0 ; i< len ;i++) cout << next[i]  << " ";
        if(next[len - 1] != 0 && len % (len - next[len-1]) == 0 ) return true;
        return false;
   }
};

标签:string,重复,s1,next,int,字符串,leetcode,size
From: https://www.cnblogs.com/lanshuai-blog/p/18308391

相关文章

  • 【LeetCode 0051】【剪枝】N皇后
    N-QueensThen-queenspuzzleistheproblemofplacingnqueensonannxnchessboardsuchthatnotwoqueensattackeachother.Givenanintegern,returnalldistinctsolutionstothen-queenspuzzle.Youmayreturntheanswerinanyorder.Eachsolu......
  • leetcode_189. 轮转数组
    leetcode_189.轮转数组题目描述:给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。示例1:输入:nums=[1,2,3,4,5,6,7],k=3输出:[5,6,7,1,2,3,4]解释:向右轮转1步:[7,1,2,3,4,5,6]向右轮转2步:[6,7,1,2,3,4,5]向右轮转3步:[......
  • LeetCode-环形链表、环形链表 II
    一、环形链表.-力扣(LeetCode)判断是否有环,使用快慢指针,开始时都指向头节点,快指针每次走两部,慢指针每次走一步,如果在走的过程中,慢指针和快指针相同(也就是快指针和慢指针指向的节点的同)那么就说明这个链表是带环链表;原理: 若是这个链表代换,那么快慢指针一定不会走向NULL;只......
  • 在字符串的 格式化 与 反格式化 中用到的 模块 和 方法
    目录一,Open函数使用二,Json与pickle一,json模块1.将Python对象转换为JSON字符串2.将JSON字符串解析为Python对象3.读取和写入JSON文件4.处理JSON中的特殊数据类型5.错误处理二,pikel模块1.序列化Python对象2.反序列化Python对象3.处理自定义......
  • 洛谷 P10716 【MX-X1-T4】「KDOI-05」简单的字符串问题
    洛谷传送门一个\(A\)合法的充要条件为:\(A\)为\(S_{1\simi}\)的一个border;\(A\)在\(S_{1\simi}\)中不重叠地出现\(\gek\)次。建出失配树后,发现合法的\(A\)在树上组成一条某个点\(u\)到根的链,且\(u\)为\(i\)的祖先。因此我们若知道\(u\),答案就是\(d......
  • LeetCode - #97 交错字符串
    文章目录前言1.描述2.示例3.答案关于我们前言本题由于没有合适答案为以往遗留问题,最近有时间将以往遗留问题一一完善。我们社区陆续会将顾毅(Netflix增长黑客,《iOS面试之道》作者,ACE职业健身教练。)的Swift算法题题解整理为文字版以方便大家学习与阅读。......
  • C语言中常见库函数(1)——字符函数和字符串函数
    文章目录前言1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现4.strcpy的使用和模拟实现5.strcat的使用和模拟实现6.strncmp的使用和模拟实现7.strncpy函数的使用8.strncat函数的使用9.strncmp函数的使用10.strstr的使用和模拟实现11.strtok函数的使用12.strerror......
  • LeetCode-计数质数
    计数质数给定整数n,返回所有小于非负整数n的质数的数量。示例1:输入:n=10输出:4解释:小于10的质数一共有4个,它们是2,3,5,7。示例2:输入:n=0输出:0示例3:输入:n=1输出:0......
  • 字符串不会一点
    每次讲字符串杂题都发现自己忘光了。本文章用于我个人字符串专题重生。二分+哈希咕AC自动机咕SAM说文解字:SAM=SuffixAutoMation(后缀自动机)即一个可以表示字符串所有后缀的自动机。具体的,一个SAM是一个有一个确定的源点和不同终止节点的有向无环图。同时,SAM是一......
  • leetcode145. 二叉树的后序遍历,递归法+迭代法,全过程图解+步步解析,一点点教会你迭代法
    leetcode145.二叉树的后序遍历,递归法+迭代法给你一棵二叉树的根节点root,返回其节点值的后序遍历。示例1:输入:root=[1,null,2,3]输出:[3,2,1]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1]递归法还是一如既往的简单。postorder函数是递归函数,用......