字符串_实现 strStr()

ops/2025/2/28 9:34:36/

@[TOC](字符串_实现 strStr())


一、leetcode-151

实现 strStr()
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。

例如,对于输入字符串 “abcdefg” 和整数 2,函数应该将其转换为 “fgabcde”。
输入:2
abcdefg

输出:fgabcde


二、题解

1.引库

 #include <iostream>#include <cstdio>#include <cstdlib>#include <queue>#include <stack>#include <algorithm>#include <string>#include <map>#include <set>#include <vector>using namespace std;

2.代码

最长公共前后缀
计算出前缀表
在字符串匹配算法中,尤其是 KMP 算法中,next 数组(或前缀表)用于表示每个前缀的最长相等前后缀的长度。将这个数组的值统一减一(即右移一位,使得初始位置为 -1)

class Solution {
public:void getNext(vector<int> &next,string &s){int j=-1;next[0]=j;for(int i=1;i<s.size();i++){// 注意i从1开始while(j>=0&&s[i]!=s[j+1]){j=next[j];}if(s[i]==s[j+1]){// 找到相同的前后缀j++;}next[i]=j;// 将j(前缀的长度)赋给next[i]}}int strStr(string haystack, string needle) {if(needle.size()==0) return 0;vector<int> next(needle.size());getNext(next,needle);int j=-1;for(int i=0;i<haystack.size();i++){while(j>=0&&haystack[i]!=needle[j+1]){j=next[j];}if(haystack[i]==needle[j+1]){j++;}if(j==needle.size()-1){return i-needle.size()+1;            }}return -1;}
};

http://www.ppmy.cn/ops/161917.html

相关文章

网络基础 —HTTP与HTTPS的基本介绍

网络基础 —HTTP与HTTPS的基本介绍 前言1. HTTP的基本概念1.1 什么是HTTP&#xff1f;1.2 HTTP的工作原理1.3 HTTP的特点1.4 HTTP的常见方法 2. HTTPS的基本概念2.1 什么是HTTPS&#xff1f;2.2 HTTPS的工作原理2.3 HTTPS的特点2.4 HTTPS的证书 3. HTTP与HTTPS的区别4. 为什么需…

蓝桥杯 五子棋对弈

五子棋对弈 问题描述 “在五子棋的对弈中&#xff0c;友谊的小船说翻就翻&#xff1f;” 不&#xff01;对小蓝和小桥来说&#xff0c;五子棋不仅是棋盘上的较量&#xff0c;更是心与心之间的沟通。这两位挚友秉承着"友谊第一&#xff0c;比赛第二"的宗旨&#xff…

DIALOGPT:大规模生成式预训练用于对话响应生成

摘要 我们提出了一个大规模、可调节的神经对话响应生成模型&#xff0c;DIALOGPT&#xff08;对话生成预训练变换器&#xff09;。该模型训练于从2005年至2017年间Reddit评论链中提取的1.47亿次类似对话的交流&#xff0c;DIALOGPT扩展了Hugging Face的PyTorch变换器&#xff…

rustdesk远程桌面自建服务器

首先&#xff0c;我这里用到的是阿里云服务器 centos7版本&#xff0c;win版客户端。 准备工作 centos7 服务器端文件&#xff1a; https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11-1/rustdesk-server-linux-amd64.zip win版客户端安装包&#xff1…

Python入门 — 类

面向对象编程中&#xff0c;编写表示现实世界中的事物和情景的类&#xff08;class&#xff09;&#xff0c;并基于这些类来创建对象&#xff08;object&#xff09;。根据类来创建对象称为实例化&#xff0c;这样就可以使用类的实例&#xff08;instance&#xff09; 一、创建…

【Go】十六、protobuf构建基础服务信息、grpc服务启动的基础信息

商品服务 服务结构 创建 goods 服务&#xff0c;将之前 user 服务的基本结构迁移到 goods 服务上&#xff0c;完整目录是&#xff1a; mxshop_srvs user_srv … tmp … goods_srv config config.go 配置的读取表 global global.go 数据库、日志初始化、全局变量定义 handler …

网络安全学习中,web渗透的测试流程是怎样的?

渗透测试是什么&#xff1f;网络安全学习中&#xff0c;web渗透的测试流程是怎样的&#xff1f; 渗透测试就是利用我们所掌握的渗透知识&#xff0c;对网站进行一步一步的渗透&#xff0c;发现其中存在的漏洞和隐藏的风险&#xff0c;然后撰写一篇测试报告&#xff0c;提供给我…

从 0 到 1:使用 Docker 部署个人博客系统

引言 在当今数字化时代&#xff0c;拥有一个个人博客来记录自己的学习、生活和见解是一件非常有意义的事情。然而&#xff0c;传统的博客部署方式往往涉及复杂的环境配置和依赖管理&#xff0c;容易让人望而却步。而 Docker 的出现&#xff0c;为我们提供了一种简单、高效的解…