算法练习day8

反转字符串

代码随想录 0344.反转字符串

344. 反转字符串 - 力扣(LeetCode)

(用时:0.05小时)

思路

这道题很简单也很经典。

字符串的反转方法有很多,我这里是用for循环通过数组长度和下标计算来交换。

写这道题时逻辑不难,后面涉及到指定区域的翻转后,脑子就跟不上了。。。后面就直接用双指针了。。

代码实现

public class ReverseString
{public void ReverseStringFun(char[] s){char temp;for(int i=0;i<s.Length/2;i++){temp = s[i];s[i] = s[s.Length-1-i];s[s.Length - 1 - i] = temp;}}
}

反转字符串II

代码随想录 0541.反转字符串II

541. 反转字符串 II - 力扣(LeetCode)

(用时:3小时)

思路

这道题主要是要理解题意。。

题目要求我们按2K为一组,每组的前K个元素进行翻转。

  • 这意味着一般的情况应该是K个翻转K个不翻转

  • 当元素无法达到2K时:

    若>K,则翻转K个元素 若<K,则翻转剩余所有的元素

    image-20240514104414238

错误

这道题在交换指定区域的数组元素中卡住,对自己更无语了

上一道题是用for循环,然后直接通过计算一下子秒掉了,但是这道题中,初始值和终点值有变化,写多了看多了逻辑就混乱了。。。。于是用回了while双指针。。。

代码实现

public char[] ReserseChars(int start,int end, char[] chars)
{char temp;while(start<end){temp = chars[start];chars[start] = chars[end];chars[end] = temp;start++;end--;}return chars;
}
​
public string ReverseStr(string s, int k)
{char[] ans =  s.ToArray<char>();for (int i=0;i<s.Length;i+=2*k){//剩余的少于k个if (i+k>ans.Length){ans = ReserseChars(i, ans.Length-1, ans);}//大于k个小于2k个else{ans = ReserseChars(i, i + k-1, ans);}}return new string(ans);
}

翻转字符串里的单词

代码随想录 0151.翻转字符串里的单词

151. 反转字符串中的单词 - 力扣(LeetCode)

(用时:2小时)

思路

这道题是对字符串中的单词翻转,意思就是单词的顺序翻转,单词本身里面的字母不要翻转。

要实现有很多种方法,又看到一位大佬用了字典(键值对)。我刚开始也想着可以用分割字符串的方法。

但训练算法时还是不要用这么多库函数。卡哥也要求我们在原字符串上操作。

我们可以先将整体的字符串翻转,这样单词的顺序就达到了我们的效果。但是单词的字母也翻转了,我们逐一对单个单词再翻转一次即可。此外还要消减空格,让每个单词之间只有一个空格。

重点

个人感觉这道题主要是思路上的问题。卡哥给的思路很清晰,所以实现起来没有出什么问题。

但是自己想的时候是很混乱的,判断来判断去的。。。思路真的很重要啊!

错误

写的过程中,犯了一些错误:

  1. 去除空格和翻转单词的实现。

  2. 最终输出的字符串,后面多余了很多重复的字母们。

  3. 使用ReserseChars时数组越界

  4. 分别在去除空格和翻转单词的for循环中,while循环的条件数组越界了。

个人理解如下:

  • 去除空格和翻转单词的实现错误。

    这道题里,去除空格和翻转单词分开做比较好,这样不容易乱。

  • 最终输出的字符串,后面多余了很多重复的字母们。

    后面重复的都是新字符串中无用的空间。因为新的字符串的长度没有记录下来,导致后面翻转单词时依旧遍历原本字符串的长度,把后面多余的“垃圾”也翻转,然后输出了。

  • 使用ReserseChars时数组越界

    这是在输入begin和end的时候,fast此时在前面的while中,可能是=len了,此时ans[fast]会越界。

    而且这个单词有效的范围也是slow到fast-1,fast本身停止的条件就是当fast指向不属于该单词的范围的时候(即越界或者遇到空格的单词结束。)

  • 分别在去除空格和翻转单词的for循环中,while循环的条件数组越界了。

    这是因为在for中间,“擅自”让i/fast向前探索,只有两种情况下会让它停下来: 一是找到指定要求的地方了(比如找到不属于单词的部分了) 二是到了末尾,这个单词刚好是最后一个。

    第一种情况用ans[fast或i]!=' '既可,但第二种情况下的ans是会越界的!因此要有一个判断其是否超出范围的条件,且这个条件要放在第一个条件前判断。

代码实现

这道题是剑指Offer的题目。力扣上已经下架了,卡哥的卡玛网上没有C#的检测,也没有专门去写C++的版本。。。

public char[] ReserseChars(int start, int end, char[] chars)
{char temp;while (start < end){temp = chars[start];chars[start] = chars[end];chars[end] = temp;start++;end--;}return chars;
}
​
​
public string Reserse(string s,int k)
{char[] ans = ReserseChars(0, s.Length - 1, s.ToArray<char>());
​ans = ReserseChars(0, k-1, ans);ans = ReserseChars(k - 1, s.Length - 1, ans);
​return new string(ans);
}

替换数字(空格)

代码随想录 0054.替换数字

(用时:1小时)

这道题没有对字符串的翻转操作了,本题主要考察的是插入删除(个人感觉)。

C#中对string的扩张不用库函数太麻烦了,因此就不写卡哥教的双指针的方法了,实现用了库函数。卡哥的方法有分析了一下,接下来二刷试试用C++实现吧。

代码实现

public string Replace(string s)
{string number = "number";int index = 0;
​while(index<s.Length){if (s[index]>='0' && s[index]<='9'){s = s.Remove(index, 1);s = s.Insert(index, number);}index++;}return s;
}

右旋字符串

代码随想录 0055.右旋字符串

(用时:1小时)

只能说太牛了卡哥的思路!写完上一题过来还是没有想到这个想法:整体翻转+局部翻转

思路和翻转单词那里一样。

同样也是剑指Offer。

代码实现

public char[] ReserseChars(int start, int end, char[] chars)
{char temp;while (start < end){temp = chars[start];chars[start] = chars[end];chars[end] = temp;start++;end--;}return chars;
}
​
​
public string Reserse(string s,int k)
{char[] ans = ReserseChars(0, s.Length - 1, s.ToArray<char>());
​ans = ReserseChars(0, k-1, ans);ans = ReserseChars(k - 1, s.Length - 1, ans);
​return new string(ans);
}

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

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

相关文章

【小积累】@Qualifier注解

今天在看rabbitMQ的时候需要绑定交换机和队列&#xff0c;交换机和队列都已经注入到spring容器中&#xff0c;写了一个配置类&#xff0c;使用了bean注解注入的。所以这时候绑定的时候需要使用容器中的交换机和队列&#xff0c;必须要使用Qualifier去确定是容器中的哪个bean对象…

【Unity Shader入门精要 第7章】基础纹理补充内容:MipMap原理

1.纹理采样 我们对纹理采样进行显示的过程&#xff0c;可以理解为将屏幕上的一个像素&#xff08;下文用像素表示&#xff09;映射到纹理上的一个像素&#xff08;下文用纹素表示&#xff09;&#xff0c;然后用纹理上的这个像素的颜色进行显示。 理想情况下&#xff0c;屏幕…

Optional用法

说明&#xff1a;Optional和Stream一样&#xff0c;是Java8引入的特性&#xff0c;本文介绍Optional的几个实际用法。Steam流使用&#xff0c;参考下面这篇文章&#xff1a; Stream流使用 使用 1.保证值存在 // 1.保证值存在&#xff0c;pageNumber&#xff0c;pageSizeInte…

HTTP基础概念和HTTP缓存技术

什么是HTTP HTTP是超文本传输协议&#xff0c;主要分为三个部分&#xff1a;超文本、传输、协议。 超文本是指&#xff1a;文字、图片、视频的混合体。传输是指&#xff1a;点与点之间的信息通信。协议是指&#xff1a;通信时的行为规范或约定 HTTP常见字段 字段名 解释 例…

图片标签 以及 常见的图片的格式

1.图片的基本使用 2.图片的常见格式 3.bmp格式

前端已死? Bootstrap--JS-jQuery

目录 Bootstrap--JS-jQuery 1 jQuery基础 介绍 基础语法&#xff1a; $(selector).action() 1.1 安装jQuery 地址 基础语法&#xff1a; $(selector).action() 2 jQuery事件 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法。 jQuery常用事件 2.1 鼠标事件…

element-ui的表单中,输入框、级联选择器的长度设置

使用<el-col>控制输入框的长度 <el-form-item label"姓名" label-width"80px"><el-col :span"15"><el-input v-model"form.name" autocomplete"off"></el-input></el-col></el-form…

AI助力内容创作:让效率与质量齐飞

简述&#xff1a; 本文介绍了AI如何帮助创作者在保持内容质量的同时&#xff0c;大幅度提升生产效率的一些方法&#xff0c;希想 对大家有帮助。 一、自动化内容生成 1. 文本内容生成 使用GPT等模型&#xff1a;利用如GPT-3或GPT-4等大型语言模型&#xff0c;可以直接输入关…

[译文] 恶意代码分析:2.LNK文件伪装成证书传播RokRAT恶意软件(含无文件攻击)

这是作者新开的一个专栏&#xff0c;主要翻译国外知名安全厂商的技术报告和安全技术&#xff0c;了解它们的前沿技术&#xff0c;学习它们威胁溯源和恶意代码分析的方法&#xff0c;希望对您有所帮助。当然&#xff0c;由于作者英语有限&#xff0c;会借助LLM进行校验和润色&am…

Github项目管理——仓库概述(一)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

28、查看Qt源码

一、方法1 在安装Qt时&#xff0c;需要勾选“Sources” 在Qt的安装目录Qt5.12.10\5.12.10\Src中可以找到Qt的源码 二、方法2 访问如下网址&#xff08;需要翻墙&#xff09; https://codebrowser.dev/ 在搜索框中输入要查找的信息&#xff0c;如&#xff1a;QMainWindow&…

【IDE】com.intellij.debugger.engine.evaluation.EvaluateException

目录标题 报错重现代码分析解决方式 报错重现 Error during generated code invocation com.intellij.debugger.engine.evaluation.EvaluateException: Method threw java.lang.NullPointerException exception.代码分析 //ls来自上下文 ls.stream().map(m->m.getRewardTy…

Windows11系统配置WSL2网络使它支持LAN访问

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、WSL2安装二、使用步骤1.NAT2.镜像 三、写在最后总结 前言 WSL2的出现感觉真的是一个惊喜&#xff0c;又想玩Linux&#xff0c;又怕日用搞不了的最佳替代方…

深度学习入门到放弃系列 - 阿里云人工智能平台PAI部署开源大模型chatglm3

通过深度学习入门到放弃系列 - 魔搭社区完成开源大模型部署调用 &#xff0c;大概掌握了开源模型的部署调用&#xff0c;但是魔搭社区有一个弊端&#xff0c;关闭实例后数据基本上就丢了&#xff0c;本地的电脑无法满足大模型的配置&#xff0c;就需要去租用一些高性价比的GPU机…

优选算法——双指针2

题目一——有效三角形的个数 思路 先审题 举个例子&#xff0c;下面一个序列可分成4个三元组 然后我们论证哪个可以组成三角形即可 判断三个数能不能组成三角形&#xff1a;任意两边之和大于第三边 注意第一个和第四个&#xff0c;有人说&#xff0c;这不是两个相同的吗&#…

原生小程序开发如何使用 tailwindcss

原生小程序开发如何使用 tailwindcss 原生小程序开发如何使用 tailwindcss 前言什么是 weapp-tailwindcss ?0. 准备环境以及小程序项目1. 安装与配置 tailwindcss 0. 使用包管理器安装 tailwindcss1. 在项目目录下创建 postcss.config.js 并注册 tailwindcss2. 配置 tailwind…

【强训笔记】day22

NO.1 思路&#xff1a;将情况全部枚举出来。 代码实现&#xff1a; #include <iostream> #include<string> using namespace std;string a,b; int main() {cin>>a>>b;int ma.size(),nb.size();int retm;for(int i0;i<n-m;i){int tmp0;for(int j…

【UnityShader入门精要学习笔记】第十二章 屏幕后处理效果

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 建立一个基…

上位机图像处理和嵌入式模块部署(树莓派4b的提高版)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前人工智能非常火&#xff0c;但是人工智能需要极高的算力和海量的数据&#xff0c;因此相关的关联公司非常吃香&#xff0c;nvidia就是提供算力…

【基本数据结构】链表

文章目录 前言链表简介头节点与尾节点特性 分类单向链表双向链表循环链表 单链表基本操作定义并初始化单链表读取节点插入节点删除节点修改节点 参考资料写在最后 前言 本系列专注更新基本数据结构&#xff0c;现有以下文章&#xff1a; 【算法与数据结构】数组. 【算法与数…