首页 > 其他分享 >leetcode-28找出字符串中第一个匹配项的下标(kmp)

leetcode-28找出字符串中第一个匹配项的下标(kmp)

时间:2022-12-29 16:01:13浏览次数:36  
标签:下标 charAt int needle 28 next kmp haystack leetcode

28. 找出字符串中第一个匹配项的下标
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。



示例 1:

输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。
示例 2:

输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。
class Solution {
private static int[] getNext(int[] next,String needle){
int j =0;
next[0]=j;
for (int i = 1; i < needle.length(); i++) {
while(j>0 && needle.charAt(j)!=needle.charAt(i)){
j = next[j-1];
}

if(needle.charAt(j)==needle.charAt(i)){
j++;
}
next[i]=j;
}
return next;
}

/**
*
* @param haystack 文本串
* @param needle 模式串
* @return
*/
public static int strStr(String haystack, String needle) {
if("".equals(needle)){
return 0;
}

int[] next =new int[needle.length()];
next = getNext(next,needle);

int j = 0;
for (int i = 0; i < haystack.length(); i++) {
while(j>0 && haystack.charAt(i)!=needle.charAt(j)){
j = next[j-1];
}
if( haystack.charAt(i)==needle.charAt(j)){
j++;
}
if(j==needle.length()){
return i-needle.length()+1;
}
}
return -1;
}
}

标签:下标,charAt,int,needle,28,next,kmp,haystack,leetcode
From: https://blog.51cto.com/u_12550160/5978193

相关文章

  • 【2022.12.28】kaggle上泰坦尼克号的实操(上)
    前言经过一系列的学习,现在想入门kaggle上面的实操,多为模仿参考链接:机器学习入门:Kaggle-titanic(泰坦尼克)生存预测#ThisPython3environmentcomeswithmanyhelpf......
  • 电脑桌面主题(28)和动态视频壁纸(31)合集(收藏)
      最近就是突然被身边朋友的电脑壁纸给吸引到了,在这之前的我一直遵循着“大道至简”的原则,一张Windows原生态静态壁纸走天下,但是作为一个00后我还是“破戒”了,其......
  • [JZOJ5177]【NOIP2017提高组模拟6.28】TRAVEL
    DescriptionSolution显然,答案的L和R一定是某两个边权那么可以直接把边按R排序。枚举L,二分R判断所有的边是否合法,合法的用并查集连起来判断1和N是否在一个集合中即可Co......
  • CS5280H 无网络安装KVM虚拟机的过程
    背景信创海光机器想进行虚拟化自带了银河麒麟V10SP1的操作系统.但是没有安装virt-manager等工具会议室里面的网口又都坏了.所以准备挑战一下无网络安装KVM.过程1......
  • 2022-12-28 走势生长之不测而测 看11月30号市场连线,缠论的终极运用
    1.三个基本概念(1)级别:可完成的按照级别次序为:笔,线段,大线段,走势类型(按照中枢大小进行比较)(2)背驰:关注线段背驰和中枢背驰的不同        (3)多头空头萌发:本......
  • 软件方法(下)分析和设计第9章分析 之 分析类图——案例篇(20211228更新)
    ​​软件方法(下)分析和设计第8章分析之分析类图——知识篇(20211227更新)​​鸳鸯扣,宜结不宜解《身似摇红烛影》,词:唐涤生,曲:王粤生,唱:红线女,1954可到此处下载本文档最新版本:​......
  • 智能灌溉远程采集控制网关BL280
    智能灌溉,顾名思义就是自动感知灌溉需求信息,自动执行灌溉操作任务,无需人工监控,的一种自动化灌溉模式。智能灌溉综合应用了计算机技术、传感技术、无线通信技术等现代化技术......
  • ORA-28001: the password has expired解决方法
    Oracle提示错误消息ORA-28001:thepasswordhasexpired,是由于Oracle11G的新特性所致,Oracle11G创建用户时缺省密码过期限制是180天(即6个月),如果超过180天用户密码未做修......
  • Leetcode203
    题意:去掉给定头ListNode*head的单链表内val等于一个给定val的节点并返回头思路:此题删除链表中元素是很简单的,只需要让待删节点之前一个节点指向待删节点之后一个节......
  • 2022/12/28
    今天和爆破斗了一天...誓与爆破死磕到底写的加密有问题,还是不能自己写加密,跟个垃圾一样,明天去网上搜点简单的爆破例子写的代码和想要的代码得是一个意思不能构思的时候......