首页 > 编程语言 >字符串算法之一:朴素算法找子串

字符串算法之一:朴素算法找子串

时间:2024-07-20 17:28:19浏览次数:17  
标签:子串 index return int pattern length 算法 str 字符串

public class StringAlgorithm {

    public static void main(String[] args) {
        int result = plainFindSubStr("12345", "1234");
        System.out.println(result);
    }

    /**
     * @param str
     * @param pattern
     * @return pattern在str中第一次出现的位置,返回其第一次字符出现的index下标
     * 注意:返回-1表示没有找到符合要求的字串
     * 设str.length()=m,pattern.length()=n
     * 最坏时间复杂度:o(m*n)
     */
    public static int plainFindSubStr(String str,String pattern){
        //判空处理 & 如果字串长度比母串还长,快速返回
        if (str == null || pattern == null || str.length() < pattern.length()){
            return -1;
        }

        //注意这里母串的滑动窗口从index=0,滑到index=m-n的位置即可。滑到m-n的位置,到结尾的长度刚好是n
        //如果继续往后滑,可能charAt()方法会报数组越界错误
        lo:for (int i = 0; i < str.length()-pattern.length()+1; i++) {
            for (int j = 0; j < pattern.length(); j++) {
                //这里但凡有一个不相等,直接结束本次外层循环,进入下一次外层循环,不会执行下面的return代码
                if (str.charAt(i+j) != pattern.charAt(j)){
                    continue lo;
                }
            }
            //到这里说明上面的比较都是相等的,可以直接返回结果了
            return i;
        }

        return -1;
    }

}

标签:子串,index,return,int,pattern,length,算法,str,字符串
From: https://blog.csdn.net/m0_63246220/article/details/140569191

相关文章

  • 代码随想录算法训练营第33天 | 贪心4:452. 用最少数量的箭引爆气球、435. 无重叠区间
    代码随想录算法训练营第33天|贪心4:452.用最少数量的箭引爆气球、435.无重叠区间、763.划分字母区间452.用最少数量的箭引爆气球https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/代码随想录https://programmercarl.com/0452.用最......
  • 字符串中嵌入空字符`\0`,出现警告
    代码:#include<stdio.h>intmain(){charstr[]="Hello\0World";//在字符串中嵌入了空字符printf("%s\n",str);//这可能会导致警告return0;}在这个例子中,字符串str包含一个嵌入的空字符\0,这会导致printf函数只打印出"Hello"而忽略后面的部......
  • 代码随想录算法训练营第31天 | 贪心3:134.加油站、135.分发糖果、860.柠檬水找零、406.
    代码随想录算法训练营第31天|贪心3:134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列134.加油站https://leetcode.cn/problems/gas-station/description/代码随想录https://programmercarl.com/0134.加油站.html135.分发糖果https://leetcode.cn/problems......
  • 算法基础课第一章(中)高精度+前缀和+差分
    一、高精度(一)使用高精度的原因在计算机中处理非常大或非常小的数值时,确保计算结果的精确性和准确性。在特定情况下,可以自己实现高精度计算的数据结构和算法,例如使用字符串或数组来表示大数,并实现基本的加、减、乘、除操作。(二)高精度加法1、方法(1)描述:从最低位开始加法计算......
  • 【数据结构初阶】顺序表三道经典算法题(详解+图例)
    Hello!很高兴又见到你了~~~看看今天要学点什么来充实大脑吧——目录1、移除元素【思路+图解】 【总结】2、删除有序数组中的重复项【思路+图解】【总结】3、合并两个有序数组【思路+图解】【总结】 至此结束,ShowTime!1、移除元素【思路+图解】 ......
  • Python中,如何使用反斜杠 “\“分割字符串?
    Python语言使用反斜杠(\)作为转义符,对一些字符进行转义(escape),例如"\n""\r\n"等。所以当Python字符串中如果出现反斜杠,则会自动转义其后的字符。但这会导致一个问题,就是,如果只是把反斜杠作为字符字面(liberal)意义,应该如何处理?如果不使用re模块(regularexpressionmodule),在Py......
  • leetcode位运算(3211. 生成不含相邻零的二进制字符串)
    前言经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。接下来重点专项练习,加强重难点知识的练习。描述给你一个正整数 n。如果一个二进制字符串 x 的所有长度为2的子字符串中包含 至少 一个 "1",则称 x 是一个 有效 字符串。返回所有长度......
  • 字符函数和字符串函数
    ⽬录:1.字符分类函数2.字符转换函数3.strlen的使⽤和模拟实现4.strcpy的使⽤和模拟实现5.strcat的使⽤和模拟实现6.strcmp的使⽤和模拟实现7.strncpy函数的使⽤8.strncat函数的使⽤9.strncmp函数的使⽤10......
  • 零基础,快速学YOLO目标检查算法(YOLO—v1,2,3快速学习)
    一.深度学习经典检测方法1.two-stage(两阶段):Faster-rcnnMask-Rcnn系列,先有预选,预选完之后再通过预选得到最终结果。速度通常较慢,但效果不错2.one-stage(单阶段):YOLO系列,普通回归任务。最核心的优势,速度非常快,适合做实时检测任务,但效果通常情况不会太好二.指标分析map指标......
  • 蓝桥杯Python算法竞赛常用的函数库
    博客主页:音符犹如代码系列专栏:Python关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......