算法力扣刷题记录 二十一【344.反转字符串和541. 反转字符串II】

前言

字符串篇开张。
记录 二十一【344.反转字符串和541. 反转字符串II】


一、344题目阅读和解答

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:

1 <= s.length <= 105
s[i] 都是 ASCII 码表中的可打印字符

代码实现

class Solution {
public:
    void reverseString(vector<char>& s) {        
        for(int i = 0,j = s.size()-1; i < j ; i++,j--){//i 
            //swap(s[i],s[j]);
            char temp = s[i];
            s[i] = s[j];
            s[j] = temp;
        }
    }
};

总结:不再多说,一个专栏,做到这步可以想到“双指针法”。


二、541. 反转字符串II 题目阅读和实现

题目阅读

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

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

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

提示:

1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104

思路

仍然是反转操作,双指针法可以很好解决(会反转操作)。那么每一轮i,j的位置怎么确定?确定好每一次反转的两端,题目就解决了。
(1)每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 2k为一组,遇到一个2k,就反转一次。总长size = s.size(),有多少个2k?就反转多少次。所以次数:num = size/(2*k)。
  • 第一次反转:i = 0;j = k-1; //前k个字符
  • 第二次反转:i = 2k;j = 2k + k -1; //前k个字符
  • 第三次反转:i = 2k * 2 = 4k ; j = 4k + k -1; //前k个字符
  • 发现规律:第n次反转:i = 2k * (n-1) ; j = i + k -1; //前k个字符
  • for循环可以知道当前是第几次。

(2)处理剩余字符:剩余多少个字符呢?size%(2*k)就是剩余的字符。

  • 如果等于0,直接return s;
  • 如果小于k,再来一次反转全部剩余字符。i = 2k * num; j = s.size() -1;
  • 如果大于k,反转前k个:i = 2k * num; j = i + k -1;

代码实现(测试通过)

class Solution {
public:
    string reverseStr(string s, int k) {
        int size = s.size();
        int num = size/(2*k);
        int m = num;
        while(m){ //反转,写for循环也可以。
            int i = (num - m) * 2 * k;  //j--如果在while中作减法,这里还要用j。
            int j = i + k -1;
            for(;i < j;i++,j--){
                swap(s[i],s[j]);
            } 
            m--;
        }
        //处理剩余不足2k的字符
        if(size%(2*k) != 0){
            int i,j;
            if(size%(2*k) < k){//剩余字符少于 k 个,则将剩余字符全部反转。
                 i = 2*k*num;
                 j = size-1;
            }else{  //剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
                i = 2*k*num;
                j = i+k-1;  
            }
            for(;i < j;i++,j--){
                    swap(s[i],s[j]);
            }
        }else{
            return s;
        }
        return s;
        
    }
};

代码随想录学习

学习内容

思路一致。先操作成段的2k区间,再操作剩余的字符。
但是处理操作不一样。可以直接使用reverse函数。


总结

反转字符串操作两题完成:

  • reverse实现原理:可以用双指针法,原地反转操作;
  • 成段处理,可以找 两个指针/reverse的范围间隔 如何变化。

(欢迎指正,转载表明出处)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用python基于经纬度获取高德地图定位地址【逆地址解析】

一、高德地图api申请 1. 高德开放平台注册&#xff0c;登录 进入网址&#xff1a;高德开放平台 | 高德地图API 注册 -- 支付宝扫码认证 -- 完善个人信息 -- 登录 2. 申请API &#xff08;1&#xff09;点击头像 -- 应用管理 -- 我的应用 -- 创建新应用 &#xff08;2&…

对于恒指你了解够多吗?

不少人进入股市选择投资哪种哪种期货&#xff0c;都是因为听别人说利润大&#xff0c;于是也不管三七二十一&#xff0c;就盲目的跟着投资了&#xff0c;认为所有的期货都应该应用一样的操作办法&#xff0c;随机应变就是了&#xff0c;其实不然&#xff0c;每种期货都有着自己…

springboot3.x的优势在哪里,我们是否要选择springboot3.x

Spring Boot 3.x的优势主要体现在以下几个方面&#xff0c;这些优势使得它成为了一个值得考虑的选择&#xff1a; Java 17支持&#xff1a;Spring Boot 3.x 支持 Java 17&#xff0c;这是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;带来了许多新特性和性能改进。…

从ChatGPT代码执行逃逸到LLMs应用安全思考

摘要 11月7日OpenAI发布会后&#xff0c;GPT-4的最新更新为用户带来了更加便捷的功能&#xff0c;包括Python代码解释器、网络内容浏览和图像生成能力。这些创新不仅开辟了人工智能应用的新境界&#xff0c;也展示了GPT-4在处理复杂任务方面的惊人能力。然而&#xff0c;与所有…

亚马逊云科技快速上手训练营:模块一

课程目标 初步了解云平台与本地环境的差异初步了解亚马逊云科技平台的基础设施和部分核心服务初步了解亚马逊云科技平台上的弹性高可用架构初步了解亚马逊云科技平台上的架构设计准则初步了解本地架构迁移上云的基本知识 1.亚马逊云科技平台简介 1.1 什么是云计算&#xff1…

倒装COB封装技术与常规SMD封装技术差异对比

倒装COB显示屏与常规SMD LED显示屏一个很大的差异点就是在于封装工艺的不同&#xff0c;COB&#xff08;Chip on Board&#xff09;封装和SMD&#xff08;Surface Mounted Device&#xff09;封装是LED显示屏领域中两种常见的技术&#xff0c;所表现出来的差异主要在于封装结构…

Vue3学习笔记<->nginx部署vue项目

安装nginx vue项目通常部署到nginx上&#xff0c;所以先安装一个nginx。为了方便安装的是windows版nginx&#xff0c;解压就能用。 项目参考上一篇文章《Vue3学习笔记&#xff1c;-&#xff1e;创建第一个vue项目》《Vue3学习笔记&#xff1c;-&#xff1e;创建第一个vue项目》…

力扣随机一题 6/28 数组/矩阵

&#x1f4dd;个人主页&#x1f339;&#xff1a;誓则盟约⏩收录专栏⏪&#xff1a;IT 竞赛&#x1f921;往期回顾&#x1f921;&#xff1a;6/27 每日一题关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d…

最新AI智能聊天对话问答系统源码(图文搭建部署教程)+AI绘画,文生图,TTS语音识别输入,文档分析

一、人工智能语言模型和AI绘画在多个领域广泛应用 人工智能语言模型和AI绘画在多个领域都有广泛的应用。以下是一些它们的主要用处&#xff1a; 人工智能语言模型 内容生成 写作辅助&#xff1a;帮助撰写文章、博客、报告、剧本等。 代码生成&#xff1a;自动生成或补全代码&…

Arduino - Keypad 键盘

Arduino - Keypad Arduino - Keypad The keypad is widely used in many devices such as door lock, ATM, calculator… 键盘广泛应用于门锁、ATM、计算器等多种设备中。 In this tutorial, we will learn: 在本教程中&#xff0c;我们将学习&#xff1a; How to use key…

Kompas AI用户体验与界面设计对比

一、引言 在人工智能&#xff08;AI&#xff09;产品领域&#xff0c;用户体验&#xff08;UX&#xff09;和界面设计&#xff08;UI&#xff09;是衡量产品成功与否的两个关键指标。一个优秀的AI产品不仅需要具备强大的功能&#xff0c;还需要提供流畅、直观且富有吸引力的用…

还不会写WorkFlow?“讲课“即工作流,摩根大通用一段Prompt诱导LLMs自主生成

随着各种自动生成Prompt的工具被开源&#xff0c;Prompt Engineer的生存空间也在不断被压缩&#xff0c;一个明显的转变已经出现&#xff1a;要想在ALL IN AI的状态下生存下去&#xff0c;你要能从Prompt Engineer切换成WorkFlow Engineer。而WorkFlow领域的竞争也是非常激烈的…

CSS 核心知识点 - grid

思维导图 参考网址: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_grid_layout 一、什么是 grid&#xff1f; CSS Grid布局是在CSS3规范中引入的一种新的布局方式&#xff0c;旨在解决传统布局方法&#xff08;如浮动、定位、表格布局&#xff09;存在的许多问题。C…

【STM32修改串口波特率】

STM32微控制器中的串口波特率调整通常涉及到USART&#xff08;通用同步接收器/发送器&#xff09;模块的配置。USART模块提供了多个寄存器来设置波特率&#xff0c;其中关键的寄存器包括BRR&#xff08;波特率寄存器&#xff09;和USART_CR1&#xff08;控制寄存器1&#xff09…

【数学建模】——【python库】——【Pandas学习】

专栏&#xff1a;数学建模学习笔记 pycharm专业版免费激活教程见资源&#xff0c;私信我给你发 python相关库的安装&#xff1a;pandas,numpy,matplotlib&#xff0c;statsmodels 总篇&#xff1a;【数学建模】—【新手小白到国奖选手】—【学习路线】 第一卷&#xff1a;【数学…

推荐系统中冷启动环节的设计实现

推荐系统中的冷启动分为物料冷启动和用户冷启动。用户冷启动主要是针对新用户&#xff0c;但有时候也用于低活用户拉活。物料冷启动主要是让优质物料得到快速下发&#xff0c;让模型可以迅速捕获到用户对该物料的关注。本文将详细讲解用户冷启动和物料冷启动。 1、用户冷启动 用…

SAMformer:通过锐度感知最小化和通道注意力解锁变换器在时间序列预测中的潜力

目录 摘要1. 引言当前方法的局限性变换器的可训练性我们贡献的总结 2. 提出的方法符号说明2.1 问题设置2.2 激励示例命题2.1&#xff08;最优解的存在性&#xff09; 2.3 变换器的损失景观现有的解决方案 2.4. SAMformer&#xff1a;集成所有方法 3. 实验3.1 主要收获 摘要 基…

【Linux系统编程】进程控制(创建、退出、等待、替换)

目录 再聊进程创建 进程终止 进程等待 进程程序替换 再聊进程创建 初识进程创建 关于进程创建&#xff0c;这里只会说结论&#xff0c;在上面这篇文章中对进程创建进行了比较详细的阐述&#xff0c;而接下来要介绍的&#xff0c;都是基于上文说过的来展开的 一些较为重要…

98%企业竟存N日漏洞超5年,新漏洞利用攻击时长极速缩短!

专注推动网络与安全融合的全球网络安全领导者 Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;&#xff0c;近日发布 FortiGuard Labs&#xff08;Fortinet全球威胁情报响应与研究团队&#xff09;《2023 下半年全球威胁态势研究报告》。本次新发布的半年度研究报告&a…

MySQL8 新特性——公用表表达式用法 with t1 as (select * from user)

MySQL8 新特性——公用表表达式用法_mysql ctes-CSDN博客 1.普通公用表表达式 MySQL8 新特性——公用表表达式用法 在MySQL 8.0及更高版本中&#xff0c;引入了公用表表达式&#xff08;Common Table Expressions&#xff0c;CTEs&#xff09;&#xff0c;它是一种方便且可重…