• LeetCode 28. Implement strStr()


    LeetCode 28. Implement strStr() (实现 strStr())

    题目

    链接

    问题描述

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

    说明:

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

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

    示例

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

    提示

    1 <= haystack.length, needle.length <= 104
    haystack 和 needle 仅由小写英文字符组成

    思路

    字符串匹配,采用kmp算法可以减少复杂度。

    复杂度分析

    时间复杂度 O(m+n)
    空间复杂度 O(m)
    

    代码

    Java

        public int strStr(String haystack, String needle) {
            if (needle.isEmpty()) {
                return 0;
            }
    
            int n = haystack.length(), m = needle.length();
            haystack = " " + haystack;
            needle = " " + needle;
    
            char[] s = haystack.toCharArray();
            char[] p = needle.toCharArray();
    
            int[] next = new int[m + 1];
            for (int i = 2, j = 0; i <= m; i++) {
                while (j > 0 && p[i] != p[j + 1]) {
                    j = next[j];
                }
                if (p[i] == p[j + 1]) {
                    j++;
                }
                next[i] = j;
            }
    
            for (int i = 1, j = 0; i <= n; i++) {
                while (j > 0 && s[i] != p[j + 1]) {
                    j = next[j];
                }
                if (s[i] == p[j + 1]) {
                    j++;
                }
                if (j == m) {
                    return i - m;
                }
            }
    
            return -1;
        }
    
  • 相关阅读:
    centos7上修改lv逻辑卷的大小
    centos6上调整lv逻辑卷
    nginx的日志配置
    修改Linux系统默认编辑器
    mysqldump命令的安装
    centos7上设置中文字符集
    nginx的80端口跳转到443
    ubuntu上安装docker和docker-compose
    javascript递归、循环、迭代、遍历和枚举概念
    Lattice 开发工具Diamond 相关版本下载地址
  • 原文地址:https://www.cnblogs.com/blogxjc/p/16312867.html
Copyright © 2020-2023  润新知