首页 > 其他分享 >Leetcode 字符串轮转 KMP

Leetcode 字符串轮转 KMP

时间:2022-09-29 20:37:53浏览次数:74  
标签:nxt 轮转 string int s1 length KMP Leetcode

解题思路


题面
两倍s1变成字符串匹配,用KMP。
KMP预先处理模式串(短串)的\(next[]\)数组,\(next[]\)的意思为自我匹配一样的值的下一个的位置。
复杂度\(O(n)\)

代码

class Solution {
public:
    bool isFlipedString(string s1, string s2) {

        int len1=s1.length(),len2=s2.length();
        if(len1!=len2) return 0;
        string s3=s1+s1;

        int nxt[100001];
        nxt[0]=-1;nxt[1]=0;
        int len3=s3.length();
        for(int i=2,j=0;i<len2;i++){
            if(s2[i-1]==s2[j]) nxt[i]=++j;
            else if(j>0) j=nxt[j];
                 else nxt[i]=0;
        }
        int i,j;
        for(i=0,j=0;i<len3 && j<len2;){
            if(s3[i]==s2[j]) i++,j++;
            else if(j!=0) j=nxt[j];
                 else i++;
        }
        return j==len2 ? 1 : 0;
    }
};

标签:nxt,轮转,string,int,s1,length,KMP,Leetcode
From: https://www.cnblogs.com/ChrisKKK/p/16742951.html

相关文章

  • leetcode69-x的平方根
    69.x的平方根 简单题,但是考察的内容可以有很多首先是纯暴力法,毫无特色。速度也很慢。classSolution{public:intmySqrt(intx){longlongi=1;......
  • #yyds干货盘点# LeetCode 热题 HOT 100:跳跃游戏
    题目:给定一个非负整数数组 nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。 示例 1:输入:nums......
  • leetcode链表1-6
    目录leetcode链表1.删除链表中的节点2.删除链表中倒数第n个节点3.反转链表4.合并两个有序链表5.判断回文链表6.判断是否为环形链表leetcode链表1.删除链表中的节点题目:......
  • 面试题 01.09. 字符串轮转【暴力模拟】【尾插】
    题目字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。难度:简单提示:字符串长度在[0,100000]范围内......
  • LeetCode 2296. Design a Text Editor
    原题链接在这里:https://leetcode.com/problems/design-a-text-editor/题目:Designatexteditorwithacursorthatcandothefollowing:Add texttowherethecu......
  • leetcode169-多数元素
    169.多数元素这道题虽然是简单题,但是有很多精妙的解法。详情看官方题解classSolution{public:intmajorityElement(vector<int>&nums){intsize=n......
  • leetcode -- tree 2
    最大二叉树递归构造classSolution:defconstructMaximumBinaryTree(self,nums:List[int])->Optional[TreeNode]:ifnotnums:retur......
  • 力扣做题09. 字符串轮转
    这题还是比较简单的,用两个指针,进行循环比较 执行结果:通过执行用时:60ms,在所有 JavaScript 提交中击败了70.76%的用户内存消耗:41.5MB,在所有 JavaScript 提......
  • LeetCode[3] 无重复字符的最长子串
    1无重复字符的最长子串1.1题目描述        给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入:s="abcabcbb"输出:3解释:......
  • LeetCode[13] 罗马数字转整数
    1罗马数转整数1.1题目描述        罗马数字包含以下七种字符: I, V, X, ``L,C,D 和 M`。字符数值I1V5X10L50C100D500M100......