首页 > 编程语言 >代码随想录算法训练营第八天| 28. 实现 strStr() 459.重复的子字符串

代码随想录算法训练营第八天| 28. 实现 strStr() 459.重复的子字符串

时间:2023-06-15 21:57:30浏览次数:56  
标签:459 strStr int 28 needle 随想录 next size

28. 实现 strStr()  

难点:

  1,制作KMP算法

  2,next 数组要求的是,找到的下标:0/ s[i]==s[j]才可以跳出来

代码:

 1 vector<int> getNextList(string needle)
 2 {
 3     vector<int> next(needle.size());
 4     int j = 0;
 5     next[0]=0;
 6 
 7     for (int i = 1; i < needle.size(); i++)
 8     {
 9         while (j > 0 && needle[j] != needle[i])
10         {
11             j = next[j - 1];
12         }
13 
14         if (needle[i] == needle[j])
15         {
16             j++;
17         }
18 
19         next[i] = j;
20     }
21 
22     return next;
23 }
24 
25 
26 int strStr(string haystack, string needle) 
27 {
28     if (needle.size() == 0) {
29         return 0;
30     }
31 
32     auto next = getNextList(needle);
33 
34     int i = 0;
35     for (int j = 0; j < haystack.size(); j++)
36     {
37         while (i > 0 && needle[i] != haystack[j])
38         {
39 
40             i = next[i - 1];
41             cout << i;
42 
43         }
44 
45         if (haystack[j] == needle[i])
46         {
47             i++;
48         }
49 
50         if (i == needle.size())
51             return j - needle.size() + 1;
52     }
53 
54     return -1;
55 }

 

标签:459,strStr,int,28,needle,随想录,next,size
From: https://www.cnblogs.com/smartisn/p/17484203.html

相关文章

  • 代码随想录算法训练营第七天| 344.反转字符串 、 541. 反转字符串II、 剑指Offer 05.
     344.反转字符串代码:1voidreverseString(vector<char>&s){23inti=0;4intj=s.size()-1;5while(i<j)6{7charmid=s[i];8s[i]=s[j];9s[j]=mid;1011i++;12......
  • 代码随想录day07
    第三章 哈希表part02454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和 454.四数相加II 思路:采用分为两组,HashMap存一组,另一组和HashMap进行比对。首先求出A和B任意两数之和sumAB,以sumAB为key,sumAB出现的次数为value,存入hashmap中。然后计算......
  • 代码随想录算法训练营第六天| 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数
    454.四数相加II1,难点:1,多个数组之间,会有重复出现的数组,如果单用multiset也是会出错的2,如果用mutliset,在使用distance找出来equal_range的值的时候,也是会出现奇怪的错误的2,正确思路1,把重复出现的节点,次数存放到map种,然后进行遍历3,代码:1intfourSumCount(v......
  • 代码随想录算法训练营第24天 | ● 理论基础 ● 77. 组合 - 第7章 回溯算法part01
     第七章 回溯算法part01今日内容: ●  理论基础 ●  77. 组合    详细布置   理论基础  其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。 题目链接/文章讲解:https://programmercar......
  • 代码随想录算法训练营第25天 | ● 216.组合总和III ● 17.电话号码的字母组合 - 第7章
     第七章 回溯算法part02 今日内容:  ●  216.组合总和III●  17.电话号码的字母组合  详细布置   216.组合总和III  如果把 组合问题理解了,本题就容易一些了。  题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%B......
  • 代码随想录算法训练营第五天| 242.有效的字母异位词 , 349. 两个数组的交集 , 202. 快
    242.有效的字母异位词 繁冗版:1,思路:先建立两个map,对应两个字符串对应的字符,同时对他们进行计数,如果这两个数字相等,那么就是相等2,代码1boolisAnagram_complicate(strings,stringt)2{3unordered_map<char,int>existedCharBys;45for(autoch......
  • 代码随想录day06
     第三章 哈希表part01242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。242.有效的字母异位词注意点:字符串长度表示方法s.length()要带括号字符串取字符s......
  • POJ 1459 Power Network(最大流)
    题意:第一眼看到这题目觉得神题啊...其实题目给的s[i]压根不用管的....总共有n个结点,其中有发电站np个、用户nc个和调度器n-np-nc个三种节点以及M条电线(用于传输电流的),每个发电站有一个最大发电量,每个用户有个最大接受电量,现在有m条有向边,边有一个最大的电流量,表示最多可以流出这......
  • Luogu P4591 [TJOI2018]碱基序列
    [TJOI2018]碱基序列题目描述小豆参加了生物实验室。在实验室里,他主要研究蛋白质。他现在研究的蛋白质是由\(k\)个氨基酸按一定顺序构成的。每一个氨基酸都可能有\(a\)种碱基序列\(s_{i,j}\)构成。现在小豆有一个碱基串\(s\),小豆想知道在这个碱基上都多少中不同的组合方式可能得......
  • 代码随想录算法训练营第四天|24. 两两交换链表中的节点 , 19.删除链表的倒数第N个节点
    24.两两交换链表中的节点 个人感觉这个不太难,刚开始打算用步进值为2,来搞,但是没有想到链表应该是怎么样的,原来可以直接用: 1cur=cur->next->next 学到了,这是我自己写的代码:1ListNode*MyLinkedList::swapPairs(ListNode*head)2{3ListNode*dummyHead=new......