写点什么

代码随想录训练营 Day09 - 字符串(下)

作者:jjn0703
  • 2023-07-06
    江苏
  • 本文字数:806 字

    阅读完需:约 3 分钟

概念

KMP 算法,战略性放弃,等到周末再研究研究 。

作业题

28. 找出字符串中第一个匹配项的下标

https://programmercarl.com/0028.%E5%AE%9E%E7%8E%B0strStr.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC

class Solution {    /**     * 基于窗口滑动的算法     * <p>     * 时间复杂度:O(m*n)     * 空间复杂度:O(1)     * 注:n为haystack的长度,m为needle的长度     */    public int strStr(String haystack, String needle) {        int m = needle.length();        // 当 needle 是空字符串时我们应当返回 0        if (m == 0) {            return 0;        }        int n = haystack.length();        if (n < m) {            return -1;        }        int i = 0;        int j = 0;        while (i < n - m + 1) {            // 找到首字母相等            while (i < n && haystack.charAt(i) != needle.charAt(j)) {                i++;            }            if (i == n) {// 没有首字母相等的                return -1;            }            // 遍历后续字符,判断是否相等            i++;            j++;            while (i < n && j < m && haystack.charAt(i) == needle.charAt(j)) {                i++;                j++;            }            if (j == m) {// 找到                return i - j;            } else {// 未找到                i -= j - 1;                j = 0;            }        }        return -1;    }}
复制代码

总结

字符串

  • 如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数;

    如果库函数仅仅是 解题过程中的一小部分,并且自己已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

双指针

  • 数组、链表、字符串等题型中的常客

  • 反转字符串

  • 替换空格

  • 移除元素

  • 删除冗余空格

  • 反转字符串

  • KMP

发布于: 刚刚阅读数: 3
用户头像

jjn0703

关注

Java工程师/终身学习者 2018-03-26 加入

USTC硕士/健身健美爱好者/Java工程师.

评论

发布
暂无评论
代码随想录训练营 Day09 - 字符串(下)_jjn0703_InfoQ写作社区