leetcode:28.实现strStr()

简介: 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

题目描述:


实现 strStr() 函数。


给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。


示例1:


输入: haystack = "hello", needle = "ll"
输出: 2


示例2:


输入: haystack = "aaaaa", needle = "bba"
输出: -1


说明:


当 needle是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。


对于本题而言,当 needle是空字符串时我们应当返回 0 。这与C语言的 strstr()以及 Java的 indexOf()定义相符。


题目难度:简单


分析:


题目让我们找给定字符串在另一个字符串中第一次出现的位置,当然在java中可以直接调用indexOf()方法,但是这样就没意思了,是不是?其实简单难度的题目不要想的太复杂了,看见评论区都是很长的代码去实现KMP算法,没必要,在这里我直接用双指针就可以解决问题。让双指针保持恒定的间隔,然后再去截取字符串haystack,这样只要把haystack和needle对比,如果相等那么就找到了第一次出现的位置,如果不等,右移两个指针继续判断下一次。


代码如下:


class Solution {
    public int strStr(String haystack, String needle) {
      // 由题意可知,空字符串返回0
        if ("".equals(needle)) {
            return 0;
        }
        // 定义两个指针,左指针指向0,右指针指向间隔needle长度的位置
        int i = 0, j = needle.length();
        while (j <= haystack.length()) {
          // 如果needle等于haystack根据两个指针截取的字符串的话,就说明找到了位置
            if (needle.equals(haystack.substring(i++, j++))) {
                return i - 1;
            }
        }
        return -1;
    }
}


总结:


时间复杂度为O(n−m+1),n为haystack的长度,m为needle的长度,需要遍历字符串。

目录
相关文章
|
6月前
|
算法 C++ 索引
leetcode-28:实现 strStr()(字符串匹配,暴力匹配算法和KMP算法)
leetcode-28:实现 strStr()(字符串匹配,暴力匹配算法和KMP算法)
79 0
|
1月前
【LeetCode 21】28. 实现 strStr()
【LeetCode 21】28. 实现 strStr()
32 0
|
5月前
|
SQL 算法 数据可视化
Leetcode第28题:实现 strStr()【python】
Leetcode第28题:实现 strStr()【python】
LeetCode-28 实现strStr() KMP算法的学习
LeetCode-28 实现strStr() KMP算法的学习
|
算法 安全 Java
LeetCode - #28 实现 strStr()
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
leetcode 28 找出字符串第一个匹配的下标(KMP实现strStr)
leetcode 28 找出字符串第一个匹配的下标(KMP实现strStr)
88 0
leetcode 28 找出字符串第一个匹配的下标(KMP实现strStr)
|
存储 前端开发 算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
163 0
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
|
存储 算法 索引
代码随想录刷题|LeetCode KMP算法理论 28. 实现 strStr() 459.重复的子字符串
代码随想录刷题|LeetCode KMP算法理论 28. 实现 strStr() 459.重复的子字符串
代码随想录刷题|LeetCode KMP算法理论 28. 实现 strStr() 459.重复的子字符串
KMP - leetcode28. 实现 strStr()
快速学习 KMP - leetcode28. 实现 strStr()
KMP - leetcode28. 实现 strStr()
|
Java C语言
LeetCode 28. 实现 strStr()
实现 strStr() 函数。
109 0