首页 > 编程语言 >算法练习03

算法练习03

时间:2025-01-09 15:28:33浏览次数:3  
标签:03 needle 下标 int 练习 算法 字符串 匹配 haystack

一、题目

给你两个字符串 haystack和 needle,请你在haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle不是 haystack 的一部分,则返回-1。

  • 示例 1:输入:haystack="sadbutsad",needle ="sad"。输出:@

解释:"sad”在下标 0和6 处匹配。第一个匹配项的下标是0,所以返回0

  • 示例 2:输入:haystack="leetcode",needle ="leeto"。输出:-1

解释:"leeto"没有在“leetcode”中出现,所以返回-1

二、实现思路

1. 从 haystack 的第一个字符开始,逐个检查从该字符开始的子字符串是否与 needle 相等。

2. 如果找到了匹配的子字符串,则返回该子字符串的起始下标。

3. 如果遍历完整个 haystack 仍未找到匹配的子字符串,则返回 -1。

三、代码实现

package com.thor.test;


public class Demo {
    public static void main(String[] args) {
        //创建一个Solution
        Solution solution = new Solution();
        //示例 1: 输入:haystack="sadbutsad",needle ="sad" 输出:@ 解释:"sad”在下标 0和6 处匹配。 第一个匹配项的下标是0,所以返回0
        String haystack="sadbutsad";
        String needle="sad";
        int result = solution.strStr(haystack, needle);
        System.out.println(result);//0
        //示例 2: 输入:haystack="leetcode",needle ="leeto" 输出:-1 解释:"leeto”不存在于“leetcode”中,所以返回-1
        haystack="leetcode";
        needle="leeto";
        result = solution.strStr(haystack, needle);
        System.out.println(result);//-1

    }
}
class Solution {
    /**
     * @description:
     * @author: Allen
     * @date: 2025/1/9 15:15
     * @param: [haystack, needle]
     * @return:
     **/
    public int strStr(String haystack, String needle){
        //获取haystack的长度和needle的长度
        int n=haystack.length();
        int m=needle.length();
        //如果needle为空,则返回0
        if(m==0){
            return 0;
        }
        //遍历hatstack,检查从每个位置开始的字字符串是否与needle匹配
        for(int i=0;i<=n-m;i++){
            //假设从位置i开始匹配
            int j=0;
            //检查needle的每个字符是否与haystack中对应位置的字符匹配
            while(j<m&&haystack.charAt(i+j)==needle.charAt(j)){
                j++;
            }
            //如果j达到了needle的长度,则说明匹配成功,返回i
            if(j==m){
                return i;
            }
        }
        return -1;
    }
}

标签:03,needle,下标,int,练习,算法,字符串,匹配,haystack
From: https://blog.csdn.net/m0_73757039/article/details/145035226

相关文章

  • 递归算法实践--到仓合单助力京东物流提效增收
    作者:京东物流李硕一、背景京东物流到仓业务「对商家」为了减少商家按照京东采购单分货备货过程,对齐行业直接按照流向交接,提升商家满意度;「对京东」揽收操作APP提效;到仓合单功能应运而生;二、问题一次批量采购单(一次50或者100个采购单)需要根据不同的规则合并成多个订单;每一个......
  • C语言基础语法_03
    5、函数    函数就是程序中独立的功能,其实就是将程序打包,取一个名字,方便后面重复使用。函数的使用提高了代码的复用性和可维护性。 /*函数的定义:返回值类型函数名(形参1,形参2……){函数体;return返回值;}*/        首先先定义一个简单的不......
  • 根据相关算法对FIRSTVT或LASTVT进行求解(编译原理与技术)
    实验名称FIRSTVT与LASTVT的求解。实验内容根据相关算法对FIRSTVT或LASTVT进行求解。实验目的根据实验内容编写程序,上机调试、得出正确的运行程序,掌握FIRSTVT和LASTVT的求解方法,了解其求解过程。上机环境设计思想(流程)FIRSTVT找FIRSTVT的三条规则:如果要找A的FIRSTVT,A的......
  • AcWing算法基础课打卡 | 788 逆序对的数量
    学习C++从娃娃抓起!记录下AcWing刷过的题目,记录每一个瞬间。附上汇总贴:AcWing算法基础课打卡|汇总788逆序对的数量【题目描述】给定一个长度为nnn的整数数列,请你......
  • AcWing算法基础课打卡 | 789 数的范围
    学习C++从娃娃抓起!记录下AcWing刷过的题目,记录每一个瞬间。附上汇总贴:AcWing算法基础课打卡|汇总789数的范围【题目描述】给定一个按照升序排列的长度为nnn的整......
  • dijkstra算法
      Dijkstra算法是用于计算图中单源最短路径的经典算法,其核心思想是贪心算法,通过不断选择当前距离源点最近的节点,更新源点到其他节点的距离,直到所有节点都被访问过。算法步骤初始化:设源点为s,定义一个数组dist[]来存储从源点s到各个顶点的最短距离,初始时,源点s到自身的......
  • ASE200N03-ASEMI中低压N沟道MOS管ASE200N03
    编辑:llASE200N03-ASEMI中低压N沟道MOS管ASE200N03型号:ASE200N03品牌:ASEMI封装:TO-252最大漏源电流:160A漏源击穿电压:30V批号:最新RDS(ON)Max:1.8mΩ引脚数量:3沟道类型:N沟道MOS管芯片尺寸:MIL漏电流:恢复时间:ns芯片材质:封装尺寸:如图特性:中低压MOS管、N沟道MOS管工作结温:-5......
  • [雷达成像]对反向投影算法的粗略理解
    参考书:InversesyntheticapertureradarimagingwithMATLAB简单来说反向投影就是指将低维的数据按照某种规则映射到高维。像上图中从左边的一维数据投影到二维平面就是反向投影的体现。而在雷达成像中的反向投影法则是将雷达回波进行反向投影获得二维图像,再将各张图像进行......
  • [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(03):图像的导入、显示、调整(暨image
    前言本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。环境配置系统:window10平台:visualstudiocode语言:rust......
  • 【数据结构与算法】之线性表:栈和队列个人总结
    进度好慢呀!冲冲冲!希望能在17号之前过完一遍数据结构基础!现在也有在做题,但是做题好慢,有的看题解也不理解,......