LeetCode全集请参考:LeetCode Github 大全

题目

28. Implement strStr()

Implement strStr().

Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Clarification:

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

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().

Example 1:

Input: haystack = "hello", needle = "ll"
Output: 2

Example 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

Example 3:

Input: haystack = "", needle = ""
Output: 0

Constraints:

0 <= haystack.length, needle.length <= 5 * 104
haystack and needle consist of only lower-case English characters.

1. 穷举解法

两个for循环匹配即可,这里容易遗漏的点是判断needle是否为空字符串"", 是的话返回0.

class Solution {public int strStr(String haystack, String needle) {// check nullif (haystack == null && needle == null) {return 0;}if (haystack == null || needle == null) {return -1;}int hlen = haystack.length();int nlen = needle.length();// check ""if (nlen == 0) {return 0;}for(int i = 0; i <= hlen - nlen; i++) {for(int k = 0; k < nlen; k++) {if (haystack.charAt(i + k) != needle.charAt(k)) {break;}if (k == nlen - 1) {return i;}}}return -1;}
}

2. 优雅的写法

假设两个字符串都不为空,可以用下面优雅的写法。

class Solution {public int strStr(String haystack, String needle) {for (int i = 0; ; i++) {for (int k = 0; ; k++) {if (k == needle.length()) return i;if (i + k == haystack.length()) return -1;if (haystack.charAt(i + k) != needle.charAt(k)) break;}}}
}

算法:找出存在子字符串的最先位置28. Implement strStr()相关推荐

  1. c语言找出公共子字符串,经典C语言面试题:求解最大公共子串

    今天去面试,面试官出了一道题,求两个字符串的最大公共子串(Longest Common Substring),一听起来不是很难,但让我在纸上写着写着就迷糊了.回来特地网搜了一下.面试 下面经过两种方法 ...

  2. 字符串的匹配搜索,在主字符串中搜寻子字符串,并给出此子字符串的起始位置,否则找不到

    #include<stdio.h> #include<stdlib.h> int main() {int i, j, temp;char str[100], substr[20 ...

  3. 找出两个字符串中最长的相同子字符串

    //找出两个字符串中最长的相同子字符串public class Stringdemo {public static void main(String[] args) {String str1 = ne ...

  4. java基础—找出两个字符串中最大的子串

    // 找一个字符串的最大子串public static void main(String[] args) {String s1 = "qwerabcdtyuiop";String ...

  5. 快速找出两个字符串中所有相同的字符

    面试时看到一个试题, 编写算法, 快速找出两个字符串中所有相同的字符. 现实现如下: 1. 利用TreeSet来查找是否有相同的字符(之前是利用TreeSet来查找) 2. 利用HashSet来查找是 ...

  6. 知哈希算法——找出相似的图片

    知哈希算法--找出相似的图片 感知哈希算法--找出相似的图片 - Create Chen - 博客园 知哈希算法--找出相似的图片 Google 图片搜索功能 在谷歌图片搜索中, 用户可以上传一张图片 ...

  7. 找出两个字符串中最大子字符串,如abractyeyt,dgdsaeactyey的最大子串为actyet

    // 最大子字符串.cpp : 定义控制台应用程序的入口点. // //找出两个字符串中最大子字符串,如"abractyeyt","dgdsaeactyey"的 ...

  8. C语言找出两个字符串唯一不同的一个字符(附完整源码)

    C语言找出两个字符串唯一不同的一个字符 C语言找出两个字符串唯一不同的一个字符完整源码(定义,实现,main函数测试) C语言找出两个字符串唯一不同的一个字符完整源码(定义,实现,main函数测试) ...

  9. 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数...

    现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数. 方法1:Hash链表 方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数.开始时将B初始化为0 ...

  10. php判断字符是否在某个数组_php:如何快速在数组array中找出以某字符串开头的值...

    我写了个函数,可以实现在数组中找出以某字符串开头的值. public static function arrayContainsValueStartingBy($haystack, $needle) ...

最新文章

  1. string 日期比较_java8-新的日期API
  2. 面向对象编程的乐趣(TextBox.Text=)
  3. 扎心一问:分库分表就能无限扩容吗?
  4. 学习笔记 Keras:一些基本概念
  5. Windows环境下配置JDK
  6. qpython3可视图形界面_python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法...
  7. 串口通讯你真的会了吗?不妨看看这些经验
  8. mariadb允许远程访问权限
  9. linux在当前目录下创建pic目录,在Linux上创建.SO文件而不使用PIC(与位置无关的代码)(x86 32位)...
  10. 可以发外链的网站_可以发外链的地方有哪些?-top推
  11. 红帽子服务器怎么重装系统,红帽子RHCS套件安装与配置
  12. python menu实例_python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例...
  13. 计算机拆装与维修技能综述,综述虚拟机在计算机硬件组装与维护教学中的应用...
  14. 推荐几个用于Linux系统的PDF文档查看器
  15. 假如时光倒流,我会这么学习Java 【转载】
  16. 计算机硬盘改回基本磁盘,将动态磁盘更改回基本磁盘
  17. 联手华为,北京联通在北京打造不一样的5G慧生活!
  18. 硬盘出现坏道以及处理方法
  19. 立创EDA极速入门(1)——熟悉PCB和立创EDA基本操作
  20. VB顺序文件案例:简易文本编辑器

热门文章

  1. php 日志库,这可能是php世界中最好的日志库——monolog
  2. 嵌套查询和连接查询的效率_LeetCode 查找:groupby+having/嵌套查询/连接
  3. 详细介绍ASP.NET状态保存方法
  4. 动态规划——Palindrome Partitioning II
  5. How to Create and Drop database in MongoDB
  6. 数据分析 第三篇:数据特征分析(分布分析+帕累托分析)
  7. Android 工具
  8. MySQL数据库无法启动的简单排错
  9. 浅谈C语言中的强符号、弱符号、强引用和弱引用【转】
  10. python不同目录下的调用