LeetCode题解:最长最快乐前缀(KMP字符串匹配)

LeetCode28 KMP算法实例 LeetCode28题 KMP算法初见 阅读详情

博客链接:Cs XJH’s Blog
LeetCode题解:最长最快乐前缀

题目简而言之就是,求字符串的最长真前后缀。而最佳解决方案来自KMP算法。但是,之前没有学懂KMP,这次正好碰到相关的题目,特此来恶补一下。

首先贴上本题目的题解

class Solution {
    // KMP求next数组算法
    public String longestPrefix(String s) {
        int[] next = getNext(s);
        return s.substring(0, next[s.length()]);
    }

    private int[] getNext(String s) {
        int[] next = new int[s.length()+1]; // 表示子串s[0],s[1],...,s[i-1]的最长真前后缀长度
        int i = 0, j = -1; // j和next[0]初始化为-1,目的是防止下标越界
        next[0] = -1;

        while (i < s.length()) {
            if (j == -1 || s.charAt(i) == s.charAt(j)) {
                next[++i] = ++j; // 匹配成功
            }else {
                j = next[j];  // 表示当前前缀字符串匹配失败,回到上一次匹配位置
            }
        }

        return next;
    }
}

// 完整KMP算法
private static int kmp(String s, String p) {
	int[] next = getNext(p);
	int i=0,j=0;

	while (i < s.length() && j < p.length()) {
		if (j == -1 || s.charAt(i) == p.charAt(j)) {
			i++;
			j++;
		} else {
			j = next[j];
		}
	}

	if (j == p.length()) {
		return i-j;
	}
	return -1;
}

private int[] getNext(String s) {
	int[] next = new int[s.length()+1];  // 表示子串s[0],s[1],...,s[i-1]的最长真前后缀长度
	int i = 0, j = -1;  // j和next[0]初始化为-1,目的是防止下标越界
	next[0] = -1;

	while (i < s.length()) {
		if (j == -1 || s.charAt(i) == s.charAt(j)) {
			next[++i] = ++j;  // 匹配成功
		} else {
			j = next[j];  // 表示当前前缀字符串匹配失败,回到上一次匹配位置
		}
	}

	return next;
}
【KMP 滚动哈希】1392. 最长快乐前缀 「快乐前缀」 是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。如果不存在满足题意的前缀,则返回一个空字符串 "" 。 阅读详情

相关推荐

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 883

Leecode刷题——字符串——KMP算法

本文借助一道经典的字符串匹配的题目来复习KMP匹配算法。对于两个长度为n和m的字符串(文本串和模式串)的匹配,使用暴力解法的时间复杂度为O(m*n)而使用KMP算法的时间复杂度变为O(m+n)。 例题:28(实现 strStr()) 1.KMP概述 KMP算法的主要思想是在进行字符串的匹配出现不匹配的时候利用前面已经匹配过的一部分字符串来避免模式串的重头开始匹配。 文本串:用于进行被匹配的串(一般是长串) 模式串:用于匹配的串(一般是短串) 2.前缀表(next数组存储) 前缀表是记录

m0_67646485的博客 773

【Ablation Studies 理解】深度学习模型组件的对比实验/性能分析

Ablation Study 用于检测深度学习/机器学习模型中各部分构件对于整体的重要性。 可以理解为为:组件\tricks重要性测试、组件性能系统性分析、控制变量法、组件去除对比实验、性能敏感性测试、性能因子分析等 Ablation Studies 一些新颖的深度学习模型在论文中都会进行AblationStudy,这部分的主要意义在于系统性的移除模型中的各种组件/trick等因子或者是创新的...

TomRen 4588

【LeetCode】KMP算法

我们只需要将当前模式串中的指针移动从索引0开始的最大长度的位置,也即2,对应字符。,之后我们继续逐个移动字符进行匹配,如此直至找到匹配的子串或者文本串结束。把失败的后缀作为下一次匹配的前缀,这就是KMP算法的基本思想。如果直接计算每个子串的最长前后缀的长度,那么计算的复杂度将达到。,我们的目标是在文本串中寻找是否有子串与模式串相同。的下一个字符匹配失败的时候,我们查阅前缀表,得知。相同前后缀的最大长度为2,我们的目标是将。,但是在下一个字符的匹配中失败了。我们在失败的匹配中,匹配了两次。

MagicianJerry的博客 878

卷积神经网络-猫狗识别(附源码)

利用python实现一个卷积神经网络,训练猫狗数据集,实现对猫狗图片的预测识别

m0_63223213的博客 2万+

ESP32-S3 + TB6600驱动42步进电机:从基础接线到AccelStepper库平滑加减速实战

本文详细介绍了如何使用ESP32-S3开发板和TB6600驱动器控制42步进电机,从基础接线到利用AccelStepper库实现平滑加减速控制。内容涵盖硬件连接、基础驱动代码、AccelStepper库的安装与参数调优,以及高级技巧与故障排除,帮助创客实现工业级精准控制。

weixin_42632434的博客 284

【leetcode 力扣刷题】字符串匹配之经典的KMP!!!

一个字符串从第一个字符开始的,不包括最后一个字符的子串;

massive_jiang的博客 4555

点云图的学习

一。点云地图拼接 1.1 配置运行环境 首先配置安装opencv3,安装完成后如下图: 然后配置点云图工具pcl,直接使用apt即可安装,安装后如下图: 最后使用点云工具观察点云图: 1.2 原理解析 总的来说由多角度拍摄图片拼接为点云3D图,是通过相机的内参,将像素坐标转化为相机坐标,再通过外参将相机坐标转化为世界坐标系,然后将每张图片的像素绘制填充于同一个世界坐标系下面,形成点云3D图。...

ff_xun的博客 1万+

leetcode分类刷题:字符串匹配KMP算法

字符串匹配过程中的KMP算法,也是一种双指针的特例,一个指针指向原串,另一个指针指向匹配串,原串指针负责遍历原串的元素,匹配串指针标记匹配串中当前第一个没匹配上的 位置(下次匹配要比较的位置)。

qq_39975984的博客 516

Windows10环境下激活虚拟环境报错【source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称】

在使用Django创建Web程序前,需要创建一个虚拟的工作环境,在使用【source ll_env/bin/activate】命令激活虚拟环境时报错:source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 2。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1万+

医学图像处理实战:利用OpenSlide解析病理SVS切片的完整解决方案

本文介绍了使用openslide处理病理SVS切片的完整流程,从基础安装到科研应用。主要内容包括:1)SVS切片特点及openslide工具简介;2)环境配置与软件安装;3)基础操作:读取切片、查看信息、可视化不同层级图像;4)进阶操作:坐标裁剪与批量处理;5)科研方向拓展:结合AI模型进行病理分割分类、量化分析及可视化报告。教程提供了完整的代码示例,帮助毕业设计学生快速掌握病理图像分析的核心技能。

m0_71589036的博客 312

LeetCode 1392. 最长快乐前缀(KMP)

1. 题目 「快乐前缀」是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。 如果不存在满足题意的前缀,则返回一个空字符串。 示例 1: 输入:s = "level" 输出:"l" 解释:不包括 s 自己,一共有 4 个前缀("l", "le", "lev", "leve")和 4 个后缀("l", "el", "vel", "e...

Michael是个半路程序员 3774

数据分析案例-对某宝用户评论做情感分析

目录 原始数据 绘制词云图 情感分析 原始数据 原始数据为某宝一商品的用户评论数据 绘制词云图 # coding=utf-8 import jieba import re import wordcloud import imageio # 打开需要分析词频的文本 with open('淘宝评论3.0.txt', encoding='utf-8') as f: data = f.read() # 文本预处理 :去除一些无用的字符只提取出中文出来 new_data

m0_64336780的博客 1万+

LeetCode1392 最长快乐前缀题解

LeetCode1392 最长快乐前缀 题目 「快乐前缀」是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。 如果不存在满足题意的前缀,则返回一个空字符串。 举例子: 示例 1: 输入:s = “level” 输出:“l” 示例 2: 输入:s = “ababab” 输出:“abab”。 示例 3: 输入:s = “leetcodeleet” 输出:“leet” 示例 4: 输入:s = “a” 输出:"" 解题思路

lizefeng1998的博客 681

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

KMP算法实现思路——附带Leetcode 1392最长快乐前缀和28实现strStr()的KMP解法 Java语言

KMP算法实现思路——附带Leetcode 1392最长快乐前缀和28实现strStr()的KMP解法 Java语言 文章目录KMP算法实现思路——附带Leetcode 1392最长快乐前缀和28实现strStr()的KMP解法 Java语言目标问题KMP算法创建部分匹配表滑动并剪枝 目标问题 KMP算法主要用于解决字符串匹配相关等问题,实施起来简单,但是过程精巧。 如题在bacbababaabcbab字符串中寻找abababca字符串的位置。一般的思路会是从字符串头开始逐一匹配,再逐一滑动,如果不做任何剪

NinoSun的博客 387

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Leetcode 1392:最长快乐前缀(超详细的解法!!!)

「快乐前缀」是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。 如果不存在满足题意的前缀,则返回一个空字符串。 示例 1: 输入:s = "level" 输出:"l" 解释:不包括 s 自己,一共有 4 个前缀("l", "le", "lev", "leve")和 4 个后缀("l", "el", "vel", "evel")。...

coordinate的博客 2941

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

字符串匹配的殿堂级算法:KMP算法详解(Java实现版)

KMP算法真的还挺难的。

xiaoliii0401的博客 1820

[LeetCode 周赛181] 4. 最长快乐前缀(KMP、各种炫技、巧妙解法)

文章目录1. 题目来源2. 题目说明3. 题目解析方法一:C++17/14+string_view()应用+巧妙解法方法二:KMP+巧妙解法 1. 题目来源 链接:1392. 最长快乐前缀 2. 题目说明 3. 题目解析 方法一:C++17/14+string_view()应用+巧妙解法 暴力一直会超内存,单纯用 s.substr 会内存超限…还有单纯的截取字符串前后缀进行比较的话也会内存超限…...

Y-puyu 的博客 453

[Leetcode][第1392题][JAVA][最快乐前缀][KMP][字符串编码]

【问题描述】[困难] 【解答思路】 1. Rabin-Karp 字符串编码(详见总结) 关于为什么哈希值计算乘数为31,说法是,首先31是质数,其次编译器会将31*i 优化为 (i<<5)-i 时间复杂度:O(N^2) 空间复杂度:O(1) // 本质上就是循环比较前缀与后缀是否相等 // 利用substring equals会超时 // 利用字符串hash值来进行比较,每次也不需要重新计算 // 对于前缀 hash = hash*31 + 新添头字符ch // 对于后缀 hash =

dadongwudi的博客 339

LeetCode第181场周赛:5367. 最长快乐前缀(kmp)

「快乐前缀」是在原字符串中既是非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。 如果不存在满足题意的前缀,则返回一个空字符串。 示例 1: 输入:s = "level" 输出:"l" 解释:不包括 s 自己,一共有 4 个前缀("l", "le", "lev", "leve")和 4 个后缀("l", "el", "vel", "...

信仰.的博客 485

leetcode 1392 最长快乐前缀

起因,这是某一次周赛的最后一题,不会,后来了解到是利用kmp的next数组. 「快乐前缀」是在原字符串中既是非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。 如果不存在满足题意的前缀,则返回一个空字符串。 示例 1: 输入:s = "level" 输出:"l" 解释:不包括 s 自己,一共有 4 个前缀("l", "le", "...

weixin_39137699的博客 486

字符串匹配算法之Leetcode习题讲解

字符串匹配算法之Leetcode习题讲解。Leetcode 459: 重复的字字符串,采用KMP算法;Leetcode 1392: 最长快乐前缀,同样用KMP算法;Leetcode214 最短回文串,采用KMP算法的变体;Leetcode 5: 最长回文子串,采用马拉车算法;Leetcode 28: 找出字符串中第一个匹配的下标,采用Sunday算法;Leetcode 3: 无重复字符的最长子串,采用二分搜索;Leetcode 14:最长公共前缀,采用暴力匹配算法;Leetcode 12和面试题01.05:

qq_34603425的博客 1526

LeetCode 1392. 最长快乐前缀 (最长公共前后缀、next数组、字符串hash)

最长快乐前缀 字符串hash class Solution { public: string longestPrefix(string s) { const int P = (int)1e9+7; int n = s.size(); unsigned long long h[(int)1e5+10]={0},p[(int)1e5+10]={0}; p[0] = 1; for(int i=1;i<=n;i++){

SongyangJi 536

leetcode刷题总结——字符串匹配

并且next[0] = -1,表示第一个字符没有匹配的前后缀,如果在0位置失配,只能将目标串后移一位,去和模式串的第二位进行匹配。next数组中如果某一个元素值为-1,其实就是表示模式串当前位置没有匹配的前缀,如果在这个位置失配,那么应该直接将目标串的第一位和模式串的下一位比较。next[i]数组的值表示匹配串的i位置失配了,那么就应该拿模式串的前缀继续和当前位置匹配,即转跳到next[i]位置,继续判断是否匹配。前缀:字符串A和B,A = B+S,S非空,则B为A的前缀。子串或模式串:比较短的。

HeiSeXingYe的博客 796

[1392].最长快乐前缀

[1392].最长快乐前缀题目函数原型枚举哈希优化   题目 题目链接:https://leetcode-cn.com/problems/longest-happy-prefix/ 快乐前缀:既是前缀,也是后缀的字符串。 如 level,快乐前缀是 l。 如 ababab,最长快乐前缀是:abab。   函数原型 string longestPrefix(string s) {}   枚举 遍历一次 s 的所有前缀,同时看看前缀是否也是后缀,由于找最长前缀,所以从后.

Debroon 716

leetcode:1392. 最长快乐前缀【kmp算法,next数组】

kmp算法中的next数组求法 next【i】:从[0,i)中,s这个子串的最大匹配的前缀和后缀的长度 代码分析: 找到上一个的最大匹配长度,如果目前这个能对上,那么直接就next[i] = next[i -1] + 1 否则一直while,找到没有匹配也就是-1,这样的结果会是0,表示没有匹配 或者找到下一个next,表示在这个可匹配的前缀中的再切分的更细的可匹配前缀看看能不能匹配,一直这样操作 直到某个位置可以匹配上s[j + 1] == s[i] 这样的流程节省的朴素的逐一匹配 将时间复杂度从n *

小楼一夜听春雨 1593
上一篇: LeetCode题解:使用区间分治策略构建二叉树
下一篇: Lucene基础之核心概念及数据类型
bud~
博客等级 码龄8年 0粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值