算法练习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.hqwc.cn/news/700726.html

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

相关文章

【计算机毕业设计】基于SSM+Vue的线上旅行信息管理系统【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 设计原则 1.3 论文组织结构 2 系统关键技术 2.1JSP技术 2.2 JAVA技术 2.3 B/S结构 2.4 MYSQL数据库 3 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3 经济可行性 3.1.4 法律可行性 3.2系统功能分析 3.2.1管理员功能分析 3.2.…

无货源做抖音小店怎么找货源?怎么判断厂家是不是源头厂家?

大家好&#xff0c;我是喷火龙 抖音小店无货源玩法最重要的就是找货源&#xff0c;找有优势、稳定、靠谱的供应链。 这篇文章就给大家讲一讲怎么去找货源&#xff0c;怎么找到真正的源头厂家。 一、怎么找货源? 无货源商家找货源在1688、多多上面可能会多点&#xff0c;因…

Java获取请求参数

1.简单参数接收 前端请求参数与Controller接受变量名一致 如果参数名不一致&#xff0c;接受不成功。 可以用RequestParam指定参数名&#xff0c;可以用username接收&#xff08;不推荐&#xff09;。 required true&#xff0c;表示参数必须传递&#xff0c;如果不传递会报错…

游戏数值策划关卡策划文案策划系统策划及游戏运营干货

1.《游戏新手村》免费电子书 我2007年开始做网络游戏&#xff0c;后面又做过网页游戏和手机游戏。当时市面上关于游戏策划和运营的书籍屈指可数&#xff0c;于是我就想着要不我写一本吧&#xff0c;然后2014年10月开始撰写。关于本书的更多信息可查看这篇文章>> 游戏新手…

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

基于STM32F401RET6智能锁项目(BS82166A_3触摸按键)

一、BS81x 特征 • 工作电压&#xff1a;2.2V~5.5V • 低待机电流 • 自动校准功能 • 可靠的触摸按键检测 • 自动切换待机 / 工作模式 • 最长按键输出时间检测 • 具备抗电压波动功能 • Level Hold&#xff0c;可选高有效或低有效 • NMOS 输出内建上拉电阻 /CMOS 直接 输出…

RT Thread + CLion环境搭建

RT Thread CLion环境搭建 0.前言一、准备工具1. Env RT Thread v5.12.CLion安装3.编译及下载工具 二、新建Env工程三、CLion配置四、运行测试 0.前言 事情的起因是最近在使用RT Thread Studio时&#xff0c;发现默认的 rtt 内核版本及交叉编译链版本都过于陈旧&#xff0c;于…

其它高阶数据结构①_并查集(概念+代码+两道OJ)

目录 1. 并查集的概念 2. 并查集的实现 3. 并查集的应用 3.1 力扣LCR 116. 省份数量 解析代码1 解析代码2 3.2 力扣990. 等式方程的可满足性 解析代码 本篇完。 写在前面&#xff1a; 此高阶数据结构系列&#xff0c;虽然放在⑤数据结构与算法专栏&#xff0c;但还是作…

安全风险 - 如何解决 setAccessible(true) 带来的安全风险?

可能每款成熟的金融app上架前都会经过层层安全检测才能执行上架&#xff0c;所以我隔三差五就能看到安全检测报告中提到的问题&#xff0c;根据问题的不同级别&#xff0c;处理的优先级也有所不同&#xff0c;此次讲的主要是一个 “轻度问题” &#xff0c;个人认为属于那种可改…

ui之资源

主题 样式 菜单 上下文菜单 国际化 1字符串资源 xml java代码中使用 //res-valuse-strings.xml 默认创建的 getResources().getString(R.string.x)2 实例 3 颜色资源语法 alpha red green blue <color 行 色块 择色器 定义文件&#xff0c;用 半透明 #440000FF 常用&…

Python 函数式编程

匿名函数 Python 允许用 lambda 关键字创造匿名函数。匿名顾名思义就是没有名字&#xff0c;即不需要以标准的方式来声明&#xff0c;比如说&#xff0c;使用 def 加函数名来声明。一个完整的 lambda “语句”代表了一个表达式&#xff0c;这个表达式的定义体必须和声明放在同…

2024CKE中国婴童展

举办地点&#xff1a;上海新国际博览中心 举办时间&#xff1a;2024年10月16-18日 同期展会&#xff1a;CTE中国玩具展、CPE中国幼教展、CLE中国授权展 展会规模&#xff1a;230,000平米 展商数量&#xff1a;2,500 参展品牌&#xff1a;5,212 …