刷题了: 151.翻转字符串里的单词 |卡码网:55.右旋转字符串

151.翻转字符串里的单词

题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/description/
文章讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html
视频讲解:https://www.bilibili.com/video/BV1c8411P7iz/?spm_id_from=autoNext&vd_source=e70917aa6392827d1ccc8d85e19e8375
实现情况:
使用双指针的方法

class Solution {
public:// 翻转函数 左闭右开void reverse(string& s, int start, int end) {for (int i = start, j = end; i < j; i++, j--) {swap(s[i], s[j]);}}string reverseWords(string s) {// 1、去空格int i = 0;int j = 0;for (; j < s.size(); j++) {if (s[j] != ' ') { // 快指针指向的不能是空格if (i != 0) {//除了第一个单词,在后面的单词前面添加一个空格s[i++] = ' ';}while (j < s.size() && s[j] != ' ') {//当快指针不是空格时,就赋值给慢指针s[i++] = s[j++];}}}s.resize(i); // slow的大小即为去除多余空格后的大小。// 2、翻转字符串reverse(s, 0, s.size() - 1);// 3、单个单词进行翻转int start = 0;for (i = 0; i <= s.size();i++) {if (i == s.size() || s[i] == ' ') {reverse(s, start, i - 1);start = i + 1;}}return s;}
};

在这里插入图片描述

卡码网:55.右旋转字符串

题目链接:添加链接描述
文章讲解:添加链接描述
视频讲解:
实现情况:

#include <iostream>
#include <string>
#include <algorithm> 
using namespace std;std::string rightRotateSimple(std::string s, int k) {  if (s.empty() || k == 0) return s;  k = k % s.length();  return s.substr(s.length() - k) + s.substr(0, s.length() - k);  
}  int main(void){int k ;string s;cin >> k >> s;string result = rightRotateSimple(s, k);cout << result << endl;  return 0;}
#include <iostream>
#include <string>using namespace std;int main(void){int k ;string s;cin >> k >> s;if (s.empty() || k == 0|| k >= s.length()) return -1;  string result = s.substr(s.length() - k) + s.substr(0, s.length() - k);cout << result << endl;  return 0;
}
#include <iostream>
#include <string>
#include<algorithm>//reverse
using namespace std;int main(void){int k ;string s;cin >> k >> s;if (s.empty() || k == 0|| k >= s.size()) return -1;  int len = s.size(); //获取长度reverse(s.begin(), s.end()); // 整体反转reverse(s.begin(), s.begin() + k); // 先反转前一段,长度nreverse(s.begin() + k, s.end()); // 再反转后一段cout << s << endl;  return 0;
}

在这里插入图片描述

KMP算法了解一下

KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,用于在一个文本字符串S内查找一个词W的出现位置。该算法由Donald Knuth、Vaughan Pratt和James H. Morris三人于1977年联合发表。相比于简单的暴力匹配算法(即逐个字符比较),KMP算法通过预处理词W来避免在主字符串S中不必要的回溯,从而大大提高了匹配效率。

基本思想
KMP算法的核心在于,当在文本S中匹配词W时,如果遇到不匹配的字符,算法能够利用之前已经部分匹配的信息,将词W“滑动”到一个更有可能的位置,而不是从头开始重新匹配。这通过计算词W的“部分匹配表”(也称为“前缀函数”或“失败函数”)来实现。

部分匹配表(Prefix Function)
部分匹配表是一个数组π,其中π[j]表示词W中位置j之前的子串(不包括位置j的字符)的最长相同前后缀的长度(包括前缀和后缀本身为空的情况)。这个表在算法开始之前通过预处理词W得到。

算法步骤
预处理:计算词W的部分匹配表π。
匹配过程:
初始化两个指针,i指向文本S的当前位置,j指向词W的当前位置。
当i小于S的长度且j小于W的长度时,执行循环:
如果S[i]等于W[j],则两个指针都向前移动一位(i++,j++)。
如果S[i]不等于W[j],则j根据部分匹配表π回退到π[j-1]的位置(即j = π[j-1]),而i保持不变,继续比较。
如果j等于W的长度,说明找到了一个匹配,算法可以输出匹配的位置(通常是i-j+1,因为i已经指向了匹配词末尾的下一个字符),并根据需要继续搜索其他匹配或结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2之jessibuca视频插件使用教程

vue2之jessibuca视频插件使用教程 jessibuca简介前期准备下载相关jsvue index.html文件引入 组件封装使用小知识 引入iconfont jessibuca简介 Jessibuca是一款开源的纯H5直播流播放器&#xff0c;通过Emscripten将音视频解码库编译成Js&#xff08;ams.js/wasm)运行于浏览器之中…

基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署

文章目录 摘要项目结构项目开发项目上线参考文章 摘要 本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1&#xff0c;通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项…

12.Spring事务和事务传播机制

文章目录 1.为什么需要事务2.Spring 中事务的实现2.1 MySQL 中的事务使⽤2.2 Spring 编程式事务2.3 Spring 声明式事务&#xff08;自动&#xff09;2.3.1 Transactional 作⽤范围2.3.2 Transactional 参数说明2.3.3 注意事项2.3.4 Transactional ⼯作原理 3.事务隔离级别3.1 事…

vue+element的table合并单元格(竖着合并行)及合计行添加并计算

1 效果: 代码分析: 1 表格头配置: 2 懒得写的:自己复制吧 <el-table:data"tableData"style"width: 98%":height"height"v-loading"isLoading"stripe"false" :span-method"objectSpanMethod"show-summary:summ…

视图、存储过程、触发器

一、视图 视图是从一个或者几个基本表&#xff08;或视图&#xff09;导出的表。它与基 本表不同&#xff0c;是一个虚表&#xff0c;视图只能用来从查询&#xff0c;不能做增删改(虚拟的表) 1.创建视图 创建视图的语法&#xff1a; create view 视图名【view_xxx / v_xxx】 a…

深入理解MySQL锁机制与性能优化:详解记录锁、间隙锁、临键锁及慢SQL查询分析

1. 事务隔离和锁机制详解 记录锁 第一种情况,当我们对于唯一性的索引(包括唯一索引和主键索引)使用等值查询,精准匹配到一条记录的时候,这个时候使用的就是记录锁。 比如 where id = 1 4 7 10。 间隙锁 第二种情况,当我们查询的记录不存在,无论是用等值查询还是范围…

Thinkphp开发文档二次整理版

基础部分 安装 环境要求 ​ *php>7.1.0 命令下载 通过Composer进行下载&#xff0c;操作步骤下载软件 phpstudy --->点击软件管理 --->安装Composer --->再点击网站 --->点击管理 --->点击Composer --->复制如下命令代码&#xff1a; ​ 稳定版&…

国际化技术参考

一、概述 国际化就是用户可以选择对应的语言,页面展示成对应的语言; 一个系统的国际化按照信息的所在位置,可以分为三种国际化信息: 前端页面信息后端提示信息数据库的字典类信息二、前端页面国际化 使用i18n库实现国际化 i18n国际化库思路:通过jquery或者dom操作拿到需…

推荐4款简单高效的视频转文字工具。

最近我要将很多的以前的培训视频转换成笔记&#xff0c;觉得很麻烦&#xff0c;于是就搜索有没有什么工具可以帮助。结果就真的找到了很多将视频转换成文字的软件和网站。解决了一个大工程&#xff0c;后来发现其实很多人都会碰到像我这样的问题&#xff0c;于是在这里将我使用…

类和对象:完结

1.再深构造函数 • 之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;构造函数初始化还有⼀种⽅ 式&#xff0c;就是初始化列表&#xff0c;初始化列表的使⽤⽅式是以⼀个冒号开始&#xff0c;接着是⼀个以逗号分隔的数据成 员列表&#xf…

通信原理-思科实验三:无线局域网实验

实验三 无线局域网实验 一&#xff1a;无线局域网基础服务集 实验步骤&#xff1a; 进入物理工作区&#xff0c;导航选择 城市家园; 选择设备 AP0&#xff0c;并分别选择Laptop0、Laptop1放在APO范围外区域 修改笔记本的网卡&#xff0c;从以太网卡切换到无线网卡WPC300N 切…

力扣Hot100-543二叉树的直径

给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5] 输出&a…

C++ 基础(类和对象下)

目录 一. 再探构造函数 1.1. 初始化列表&#xff08;尽量使用列表初始化&#xff09; 二. static成员 2.1static成员初始化 三.友元 3.1友元&#xff1a;提供了⼀种 突破类访问限定符封装的方式. 四.内部类 4.1如果⼀个类定义在另⼀个类的内部&#xff0c;这个内部类就叫…

2024.7.24 作业

1.二叉树的创建、遍历自己实现一遍 bitree.h #ifndef BITREE_H #define BITREE_H#include <myhead.h>typedef char datatype;typedef struct Node {datatype data;struct Node *left_child;struct Node *right_child; }Node,*BiTreePtr;//创建二叉树 BiTreePtr tree_cr…

我在百科荣创企业实践——简易函数信号发生器(5)

对于高职教师来说,必不可少的一个任务就是参加企业实践。这个暑假,本人也没闲着,报名参加了上海市电子信息类教师企业实践。7月8日到13日,有幸来到美丽的泉城济南,远离了上海的酷暑,走进了百科荣创科技发展有限公司。在这短短的一周时间里,我结合自己的教学经验和企业的…

【Java语法基础】9.异常处理

9. 异常处理 Error是程序无法处理的错误&#xff0c;出现时线程被JVM终止。 Exception&#xff0c;指的是程序运行时可以处理的异常。其继承关系如下表&#xff1a; 运行时异常&非运行时异常 运行时异常 都是RuntimeException类及其子类异常&#xff0c;如NullPointerE…

模拟实现c++中的string

c内置string库的相关函数&#xff1a;string - C Reference 目录 一string类构造&#xff0c;拷贝构造和析构&#xff1a; 二string内正向迭代器实现&#xff1a; 三赋值运算符重载实现&#xff1a; 四reserve&#xff0c;empty&#xff0c;clear实现&#xff1a; 五push_b…

动手学深度学习——6.循环神经网络

1.序列模型 处理序列数据需要统计工具和新的深度神经网络架构。 为了简单起见&#xff0c;我们以 图8.1.1所示的股票价格&#xff08;富时100指数&#xff09;为例。 图8.1.1 近30年的富时100指数 其中&#xff0c;用&#x1d465;&#x1d461;表示价格&#xff0c;即在时间…

LIS检验信息软件源码,适合二级医院的应用

LIS系统主要面向医院检验科&#xff0c;包含检验医生日常处理、报告处理、质量控制、条码管理、仪器双工通讯、无人值守等诸多功能模块&#xff0c;能与HIS系统、体检系统和电子病历信息系统实现无缝连接&#xff0c;已成功应用于多家各种规模的医院&#xff0c;满足客户各方面…

Git之repo sync -c与repo sync -dc用法区别(四十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…