【算法-字符串1】反转字符串 + 反转字符串2

今天,带来字符串相关算法的讲解。文中不足错漏之处望请斧正!

理论基础点这里


1. 反转字符串

题意简化

题意已经很简洁。

题意转化

将字符串的顺序倒转。

解决思路(抽象)

这道题的反转可以直接调用一个库函数,但是这样做意义不大。

  • 能直接用库函数秒的题就自己写
  • 只有部分功能用库函数实现,并且对库函数了解了就可以调用库函数

解决思路:从两边向中间,两两交换字符。

编程实现(具体)

class Solution {
public:void reverseString(vector<char>& s) {int left = 0, right = s.size() - 1;while (left < right) swap(s[left++], s[right--]);}
};

2. 反转字符串2

题意简化

题意足够简洁:
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

题意转化

用变量计数到2k时,区间内如果:

  1. 够k个就反转[i, i + k]
    1. 每2k个字符,反转前k个
    2. k <= 剩余字符 < 2k,反转前k个
  2. 不够k个就把剩下都全部反转[i, end()]

解决思路(抽象)

直接按照转化的题意写出代码即可。

编程实现(具体)

暴力写法:

class Solution {
public:string reverseStr(string s, int k) {int count = 0, begin = 0;for (int i = 0; i < s.size(); ++i) {++count;if (count == 2 * k) {myReverse(begin, begin + k - 1, s); // 每次反转k个, 反转区间: [begin, begin + k - 1]begin = i + 1;count = 0;}}if (count < k) myReverse(begin, s.size() - 1, s);else if (count >= k && count < 2 * k) myReverse(begin, begin + k - 1, s);return s;}
private:void myReverse(int begin, int end, string &s) {while (begin < end) swap(s[begin++], s[end--]);}
};

简介写法:

class Solution {
public:string reverseStr(string s, int k) {for (int i = 0; i < s.size(); i += 2 * k) { // i每次递增2k,相当于计数到2k// 够k个就反转if (i + k < s.size()) reverse(s.begin() + i, s.begin() + i + k);// 不够k个就全部反转else reverse(s.begin() + i, s.end());}return s;}
};

今天的分享就到这里了,感谢您能看到这里。

这里是培根的blog,期待与你共同进步!

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

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

相关文章

单链表OJ--8.相交链表

8.相交链表 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; /* 解题思路&#xff1a; 此题可以先计算出两个链表的长度&#xff0c;让长的链表先走相差的长度&#xff0c;然后两个链表同时走&#xff0c;直到遇到相同的节点&#xff0c;即为第一个公共节点 */struct Li…

前端学习--React(1)

一、React简介 React由Meta公司研发&#xff0c;是一个用于 构建Web和原生交互界面的库 优势&#xff1a;组件化开发、不错的性能、丰富生态&#xff08;所有框架中最好&#xff09;、跨平台&#xff08;web、ios、安卓&#xff09; 开发环境搭建 打开相应文件夹 新建终端并…

QT修改windowTitle的名字以及图片

1.修改名字:点击ui的QMainWindow,然后找到windowTitle的选项修改即可 2.修改windowTitle的图片,依旧是找到windowIcon,选择资源,这个资源可以是你放到qrc里面的图片也可以是外置的图片 3.然后运行就可以看到效果了

精通Nginx(17)-安全管控

安全是每个系统都需要考虑的关键因素,Nginx在这方面提供了丰富的功能,使我们可以就实际情形做很精细调整。这些功能包括防信息暴露、客户端访问限制、通讯加密、防DDos攻击、防爬虫、防非法引用及防非法域名请求等。 目录 防信息暴露 关闭版本号 关闭目录列表 客户端访问…

行情分析——加密货币市场大盘走势(11.21)

大饼昨日笔者已经离场&#xff0c;目前下跌形态破坏&#xff0c;等待机会再入场&#xff0c;下跌是必然的&#xff0c;只是现在从MACD日线来看是要上涨的&#xff0c;上涨趋势没有打破&#xff0c;等待机会入场。 MACD日线多单策略&#xff1a;入场37500 止盈38000-38600 止损…

Java实现LeetCode题目

Leetcode707设计链表 使用Java设计一个链表 package link_list;public class Design_Link {public static void main(String[] args) {Design_Link demo new Design_Link();Design_Link.myLinkedList myLink new Design_Link().new myLinkedList();myLink.addHead(0);myLin…

OceanBase:OBServer节点管理

目录 1.查看节点 2.添加节点 2.1 创建数据目录 2.2.OceanBase 运行时所依赖的部分三方动态库 2.3.安装 OceanBase 数据库的 RPM 包 2.4.启动节点 observer 进程 2.5.向集群中添加节点 3.隔离节点 4.重启节点 4.1 停止服务 4.2 转储 4.3 关闭进程 4.4 启动进程 4.…

gitBash中如何使用Linux中的tree命令

文章目录 在gitBash中安装tree的目的如何安装安装完成,就可以直接完美适配Linux系统了在gitBash中安装tree的目的 如下图,powershell虽然可以看做是window下的Linux系统,但是根本就不适配很多Linux中的命令 如何安装 tree.exe安装网址 下载 tree 命令的 二进制包,安装 tr…

linux如何一键自动安装系统(PXE)

PXE概述 1、PXE 预启动执行环境&#xff0c;在操作系统之前运行 由Intel公司开发的网络引导技术&#xff0c;工作在Client/Server模式&#xff0c; 允许客户机通过网络从远程服务器下载引导镜像&#xff0c;并加载安装文件或者整个操作系统 2、PXE的优点 规模化:同时装配多…

C++实现:实现一个函数,接受一个n x n的矩阵并返回其行列式的值 某知名上市公司笔试题

目录 题目描述: 分析: 实现代码: 题目描述: 实现一个函数,接受一个n x n的矩阵并返回其行列式 如何求解矩阵的行列式? 1x1 矩阵 [[a]] 的行列式为 a。 2x2 矩阵 [ [a, b],[c, d]]的行列式为 a*d - b*c 通过将问题简化为 n 个大小为 n-1 x n-1的矩阵的行列式来计算,可…

[Vue warn]: Extraneous non-props attributes (class)

// 最外层多个标签&#xff0c;无法在使用子组件标签上定义 class // 会报错&#xff1a;[Vue warn]: Extraneous non-props attributes (class) // were passed to component but could not be automatically inherited // because component renders fragment or tex…

腾讯极光盒子A4021增强版_线刷官方

1、用USB_Burning_Tool线刷提供的线刷包&#xff0c;所需资料地址在最后 1&#xff09;打开USB_Burning_Tool&#xff0c;选择资料里的A4021_line_flash_root.img&#xff08;文件夹最好没有中文字符和空格&#xff09;&#xff0c;然后点击【开始】。 2&#xff09;盒子准备好…

【密文特征分析】加密类型判断

1、代码 import re import sysimport requestsdef post_url(data):"""其实就是把「https://www.dcode.fr/cipher-identifier」网站的功能&#xff0c;改成接口形式之所以改成接口&#xff0c;是因为网站加载有些慢&#xff0c;很多不必要加载很是浪费时间:para…

Lodash常用方法介绍

Lodash 是一个 JavaScript 工具库&#xff0c;提供了许多实用的函数和方法&#xff0c;可以简化 JavaScript 编程中的许多任务。下面是 Lodash 中常用的方法介绍&#xff1a; Array 相关方法&#xff1a;包括对数组的过滤、排序、去重、查找等操作&#xff0c;例如 _.filter()、…

springboot使用的设计模式

设计模式是在软件设计中常用的一些通用解决方案。在开发商城编码时&#xff0c;以下设计模式可能会有用&#xff1a; 工厂模式&#xff08;Factory Pattern&#xff09;&#xff1a; 用于创建对象的模式。在商城中&#xff0c;可能会涉及到创建不同类型的商品、订单等对象&…

【C++上层应用】3. 动态内存

文章目录 【 1. new和delete运算符 】1.1 new 分配内存1.2 delete 释放内存1.3 实例 【 2. 数组的动态内存分配 】2.1 一维数组2.2 二维数组2.3 三维数组 【 3. 对象的动态内存分配 】 C 程序中的内存分为两个部分&#xff1a; 栈&#xff1a;在 函数内部 声明的所有变量都将占…

go语言学习之旅之Go语言函数

学无止境&#xff0c;今天继续学习go语言的基础内容 Go语言函数 Go 语言函数定义格式如下 func function_name( [parameter list] ) [return_types] {函数体}函数定义解析 func&#xff1a;函数由 func 开始声明 function_name&#xff1a;函数名称&#xff0c;函数名和参数…

Me-and-My-Girlfriend-1

Me-and-My-Girlfriend-1 一、主机发现和端口扫描 主机发现&#xff0c;靶机地址192.168.80.147 arp-scan -l端口扫描&#xff0c;开放了22、80端口 nmap -A -p- -sV 192.168.80.147二、信息收集 访问80端口 路径扫描 dirsearch -u "http://192.168.80.147/" -e * …

浪潮信息云峦服务器操作系统KeyarchOS体验与实践

写在前面 大家好我是网络豆&#xff0c;一名云计算运维人员&#xff0c;本文将会带大家体验一下浪潮信息服务器操作系统云峦KeyarchOS。看看浪潮信息服务器操作系统云峦KeyarchOS的优势与实践操作如何。 背景了解 KeyarchOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术…

【Element】el-progress 自定义进度条

一、背景 要求弹窗内显示进度条&#xff0c;根据接口获取当前进度值&#xff0c;间隔5秒调用接口获取最新进度值&#xff0c;当进度值为100时&#xff0c;允许关闭进度条弹窗 二、效果 三、实现步骤 3.1、按钮绑定事件&#xff0c;打开弹窗 <el-button class"cance…