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

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

概念


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

目录
相关文章
|
IDE Java API
代码随想录训练营 Day01- 数组(上)
代码随想录训练营 Day01- 数组(上)
42 0
代码随想录训练营 Day02 - 数组(下)
代码随想录训练营 Day02 - 数组(下)
41 0
代码随想录训练营 Day24 - 回溯(一)
代码随想录训练营 Day24 - 回溯(一)
57 0
代码随想录训练营 Day08 - 字符串(上)
代码随想录训练营 Day08 - 字符串(上)
41 2
代码随想录算法训练营 | 数组小结
代码随想录算法训练营 | 数组小结
|
存储
代码随想录训练营 Day03- 链表(上)
代码随想录训练营 Day03- 链表(上)
70 0
代码随想录训练营 Day04 - 链表(下)
代码随想录训练营 Day04 - 链表(下)
47 0
|
C语言 C++
【C语言】刷题训练营——“ 牛客语法篇 (8) ”
前言 ​ 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解,希望要学习的小伙伴能先思考再看答案,这样学习效率倍增,如有哪里不足还请评论区留言或私信我。
|
数据安全/隐私保护 C语言
【C语言】刷题训练营——“ 牛客语法篇 (9) ”
前言 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解,希望要学习的小伙伴能先思考再看答案,这样学习效率倍增,如有哪里不足还请评论区留言或私信我。 🏡个人主页:悲伤的猪大肠9的博客_C领域博主 ✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨ 题目来源:牛客网 编程语言初学训练营_在线编程+题解_牛客题霸_牛客网 (nowcoder.com)
【C语言】刷题训练营——“ 牛客语法篇 (7) “
前言 ​ 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解,希望要学习的小伙伴先思考再看答案。