首页 > 其他分享 >28. 找出字符串中第一个匹配项的下标

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

时间:2023-10-30 19:55:57浏览次数:38  
标签:下标 int needle 28 len next prefix 字符串 haystack

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


示例 1:

输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。


class Solution {
public:
    void build_next(vector<int> &next,string str){
        const int len = str.size();
        next[0] = 0;
        int i = 1;
        int prefix_len = 0;

        while(i < len){
            if(str[i] == str[prefix_len]){
                prefix_len++;
                next[i] = prefix_len;
                i++;
            }else{
                if(!prefix_len){
                    next[i] = 0;
                    i++;
                }else{
                    prefix_len = next[prefix_len - 1];
                }
            }
        }
        return;
    }
    int strStr(string haystack, string needle) {
        const int len = haystack.size();
        next.resize(len);
        //构建next数组
        build_next(next,haystack);
        //根据next数组进行kmp
        int i = 0;
        int j = 0;
        while(i < len){
            if(haystack[i] == needle[j]){
                i++;
                j++;
            }else if(j > 0){
                j = next[j - 1];
            }else{
                i++;
            }
            if(j == needle.size()){
                return i - j;
            }
        }
        return -1;
    }
private:
    vector<int> next;
};

标签:下标,int,needle,28,len,next,prefix,字符串,haystack
From: https://www.cnblogs.com/lihaoxiang/p/17225532.html

相关文章

  • 无涯教程-C语言 - 字符串(String)
    字符串实际上是由null字符'\0'终止的一维字符数组,因此,以零结尾的字符串包含由字符串组成的字符,后跟null。以下声明和初始化创建一个由单词"Hello"组成的字符串。chargreeting[6]={'H','e','l','l','o','\0'};如果您遵循数组初始化的规则,那么您可以编写以下语句,如下......
  • 国标GB28181安防平台LiteCVR更新H.265转码:增加分辨率配置
    关于视频分析LiteCVR视频汇聚平台的转码功能,我们在此前的文章中也介绍过不少,感兴趣的用户可以翻阅往期的文章进行了解。LiteCVR视频汇聚业务平台目前可以支持H.265视频自动转码为H.264,也可以支持设置全局转码等功能,近期我们又对平台的视频转码能力进行了更新,在原有转码基础上新增转......
  • Java 新手如何使用Spring MVC 中的查询字符串和查询参数?
    文章目录什么是查询字符串和查询参数?步骤1:步骤2:步骤3:步骤4:结论......
  • 28、Flink 的SQL之DROP 、ALTER 、INSERT 、ANALYZE 语句
    文章目录Flink系列文章一、DROP1、DROPCATALOG2、DROPDATABASE3、DROPTABLE4、DROPVIEW5、DROPFUNCTION6、droptable示例二、alter1、ALTERDATABASE2、ALTERTABLE1)、建表2)、ADD1、增加单列示例2、增加watermark列3)、MODIFY1、修改列2、修改水印4)、DROP5)、RENAME6)、SET7)、......
  • PostgreSQL(kingbaseES) 中,可以使用 unnest 函数将一个包含多个值的字符串分割成多行
    在PostgreSQL中,您可以使用unnest函数将一个包含多个值的字符串分割成多行。unnest函数将一个数组(或者像我们的情况下是由STRING_TO_ARRAY函数生成的数组)展开为多行数据。假设您有一个表my_table,其中包含一个名为my_column的字符串列,其内容如下:my_column-----------......
  • 如何将R128的lspsram频率提高至200M?
    一、修改频率方法首先通过cboot0命令,跳转到boot0的代码中,路径为:${root_dir}/lichee/brandy-2.0/spl/找到lspsram的代码,路径为:${root_dir}/lichee/brandy-2.0/spl/drivers/psram修改头文件,将200M的宏打开,修改如下:vihal_psramctrl.hdiff--gita/drivers/psram/hal_psramctr......
  • Python如何去掉字符串空格?
    在Python中,当我们使用Python处理字符串时,经常会遇到字符串中包含空格的情况,那么Python如何去掉字符串空格?有多种方法可以从Python字符串中删除空格,以下是详细内容介绍。1、使用strip()方法它是一个Python内置函数,可以用来去除字符串开头和结尾的空格。例如,以下代码将......
  • 数组,list,字符串的一些转换
    //list转数组Long[]ids=updateIds.toArray(newLong[updateIds.size()]) // 数组转listList<String>reasonList=Arrays.asList(perm.trim().split(",")) // String转数组String[]reasons=business.getReason().split(",") //数组转字符串需要引⼊......
  • 【全志R128外设模块配置】USB外设功能配置
    USB外设功能配置USB功能简介USB功能模块包括了USBHost,USBDevice和OTG功能。USBHost目前已经支持上的功能有:MassStorage,UVC。USBDevice目前已经支持上的功能有:ADB,UAC。OTG主要用作Host与Device的切换,如当板子通过USB线连接到USB主机(PC)上时,此时OTG是......
  • leetcode(力扣) 128. 最长连续序列(哈希)
    文章目录题目描述思路分析完整代码题目描述给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。......