仅为个人记录复盘学习历程,解题思路来自代码随想录
代码随想录刷题笔记总结网址:
代码随想录
替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。
提供参数:string s
主要操作:
将数组扩容到所有数字都换成number的容量
使用双指针法,两指针i,j,一指针i指向新数组末尾,一指针j指向原数组末尾
当j<i时,进行如下循环操作:
判断j指针指向是否为数字,
若不是数字,s[i]=s[j];
若是数字,s[i]依次向前填充r,e,b,m,u,n(i,j指针都是从后往前)
i--,j--;
简单模拟,主要是使用双指针进行写操作,和两指针从后往前移动
151.翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。如:
输入:s = "the sky is blue"
输出:"blue is sky the"
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
提供参数:String s
主要操作:
使用双指针(快慢指针)除去多余空格:
1.字符串前空格
2.字符串中不同单词间空格大于1
3字符串尾空格
快指针fast,慢指针slow
快指针先排除字符串前的空格(fast指针移动到字符串第一个字符)
当fast指针指向最后一个字符前,重复进行以下操作:
判断是否为连续空格,
若是,continue;
若不是,s[slow++]=s[fast]
由于循环中的判断,当执行完循环后,若源字符串后有空格,则新字符串后一定知存在一个空格(排除连续空格操作),且slow指针指向该空格后一个位置(slow++导致的)
反转整个字符串(此时单词也反转了)
按空格反转单词(将单词恢复)
总体简单,主要操作应该在双指针去除额外空格,可以用别的方法,但是这个方法时间复杂度低(O(n))
这道题一开始我的想法是用空格来分割单词,然后简单交换单词就行,但是和代码随想录里说的一样,这么做这题好像没什么必要,得不到练习。
标签:单词,slow,随想录,空格,字符串,刷题,日记,指针 From: https://blog.csdn.net/weixin_73939095/article/details/142938043