热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【LeetCode】No.28.ImplementstrStr()JavaVersion

题目链接:https:leetcode.comproblemsimplement-strstr1.题目介绍(strStr())Impl

题目链接: https://leetcode.com/problems/implement-strstr/


1. 题目介绍(strStr())

Implement strStr().

Given two strings needle and haystack, return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

【Translate】: 给定两个字符串“needle”和“haystack”,返回“needle”在“haystack”中第一个出现的索引,如果“needle”不属于“haystack”,则返回“-1”。

Clarification:

What should we return when needle is an empty string? This is a great question to ask during an interview.

【Translate】: 当指针是空字符串时,我们应该返回什么?这是一个很好的面试问题。

For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C’s strstr() and Java’s indexOf().

【Translate】: 对于这个问题,当needle为空字符串时,我们将返回0。这与C的strstr()和Java的indexOf()是一致的。

【测试用例】:
test
【约束】:
Constraints


2. 题解


2.1 indexOf()

  这样的做法无疑就是耍赖了,因为题目让我实现的就是indexOf()。

public int strStr(String haystack, String needle) {return haystack.indexOf(needle);}

case1


2.2 Conventional Thinking

  iziang提供的题解 Share my accepted java solution。常规思路了,把可能的三种情况分别进行了判断。

public int strStr(String haystack, String needle) {int l1 &#61; haystack.length(), l2 &#61; needle.length();if (l1 < l2) {return -1;} else if (l2 &#61;&#61; 0) {return 0;}int threshold &#61; l1 - l2;for (int i &#61; 0; i <&#61; threshold; i&#43;&#43;) {if (haystack.substring(i,i&#43;l2).equals(needle)) {return i;}}return -1;}

case2


2.3 KMP

   cdai在Accepted KMP solution in java for reference的评论中提供的题解。

// Similar to strStr except compare t against itselfprivate int[] computePrefixFunc(String t) {int[] f &#61; new int[t.length()];for (int i &#61; 1, j &#61; 0; i < t.length(); i&#43;&#43;) { // now i &#61; #matchedwhile (j > 0 && t.charAt(i) !&#61; t.charAt(j)) j &#61; f[j - 1];if (t.charAt(i) &#61;&#61; t.charAt(j)) j&#43;&#43;;f[i] &#61; j;}return f;}public int strStr(String s, String t) {int[] f &#61; computePrefixFunc(t);int i, j;for (i &#61; 0, j &#61; 0; i < s.length() && j < t.length(); i&#43;&#43;) { // never back up iwhile (j > 0 && s.charAt(i) !&#61; t.charAt(j)) j &#61; f[j - 1]; // back up j recursively till next char matchif (s.charAt(i) &#61;&#61; t.charAt(j)) j&#43;&#43;; // if matched move j, otherwise give up current i and move on}return j &#61;&#61; t.length() ? i - j : -1;}

case3


3. 可参考

[1] 什么是KMP算法&#xff08;详解&#xff09;
[2] KMP算法详解


推荐阅读
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文介绍了在Java中检查字符串是否仅包含数字的方法,包括使用正则表达式的示例代码,并提供了测试案例进行验证。同时还解释了Java中的字符转义序列的使用。 ... [详细]
author-avatar
杨仕卫123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有