当前位置: 首页 > news >正文

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 。
public class title28 {public static void main(String[] args) {String haystack = "mississippi";String needle = "issip";int result = strStr(haystack, needle);System.out.println(result);}public static int strStr(String haystack, String needle) {int j = 0;int[] next;next=getNext(needle);  //先算模式串的next[]//1.先判断是否匹配,再找下标//i指向母串,j指向模式串for (int i = 0; i < haystack.length(); i++) {//1.不匹配while (j>0 && haystack.charAt(i) != needle.charAt(j)) {j = next[j-1];}//2.字符匹配if (haystack.charAt(i) == needle.charAt(j)) {j++;}if(j==needle.length()){return i-needle.length()+1;}}return -1;}public static int[] getNext(String s){int j = 0;int[] next=new int[s.length()];next[0] = 0;for(int i = 1; i < s.length(); i++) { // 注意i从1开始,这样才能和j比较while (j >0 && s.charAt(i) != s.charAt(j)) {// 处理前后缀不相同,回溯是个连续的过程,所以是while不是if,又因为j起始位置是0,不能再回溯,所以是j>=0j = next[j-1]; // 向前回溯,回溯前一位的next中的位置}if (s.charAt(i) == s.charAt(j)){// 找到相同的前后缀j++;  //最长相等前后缀长度加1}next[i] = j; // 将j(前缀的长度)赋给next[i],不管前后缀是否相同,都要存放}return next;}
}

http://www.lryc.cn/news/323056.html

相关文章:

  • docker opensearch arm64 运行失败解决方案
  • C#、ASP、ASP.NET、.NET、ASP.NET CORE区别、ASP.NET Core其概念和特点、ASP.NET Core个人心得体会
  • SpringMVC 简介及入门级的快速搭建详细步骤
  • Flutter编译卡在Running Gradle task ‘assembleDebug
  • 基于springboot的牙科就诊管理系统
  • C语言 指针练习
  • 【力扣 TOP100】 无重复字符的最长子串
  • K8S node磁盘清理
  • 2024年上半年软考,现在开始学真的来得及吗?
  • SfM——八点法计算F矩阵(基础矩阵)与三角测量
  • 分布式事务的解决方案--Seata架构
  • 【 React 】React JSX 转换成真实DOM的过程?
  • [Open3d]: 知识记录
  • css面试题
  • vscode调试launch.json常用格式
  • 巨细!Python爬虫详解
  • 项目中如何进行限流(限流的算法、实现方法详解)
  • https在win7的环境下如何配置
  • Day69:WEB攻防-Java安全JWT攻防Swagger自动化算法签名密匙Druid泄漏
  • Python Windows系统 虚拟环境使用
  • 栈和队列的学习
  • 【机器学习】基于机器学习的分类算法对比实验
  • 民航电子数据库:mysql与cae建表语法差异
  • (学习日记)2024.03.15:UCOSIII第十七节:任务的挂起和恢复
  • 聚类分析 | Matlab实现基于NNMF+DBO+K-Medoids的数据聚类可视化
  • Unity类银河恶魔城学习记录11-3 p105 Inventory UI源代码
  • Vue3 + Vite + ts引入本地图片
  • 图斑或者道路如何单独显示名称在图斑上或者道路上
  • docker 修改默认存储位置
  • Springboot+vue的医疗挂号管理系统+数据库+报告+免费远程调试