| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 代码随想录算法训练营day7|Leetcode344/541/05/151/58 -> 正文阅读 |
|
[数据结构与算法]代码随想录算法训练营day7|Leetcode344/541/05/151/58 |
Leetcode 344 反转字符串 本题目思路依然是使用双指针,这里插个嘴!双指针真的很好用哈哈哈哈尤其是针对数组链表字符串这种题目!强烈建议大家掌握! ? ?(上图来源于代码随想录) 定义左右指针,left = 0&right = len(s)-1? 这里循环退出条件是while left < right,当左右指针重合的时候并没有元素可以反转,所以只需要当他们重合就可以直接退出循环
Leetcode541反转字符串II 链接:541. 反转字符串 II - 力扣(LeetCode) 思路: 最开始我和大多数同学想的一样,写一个计数器,然后到了第2k的时候在进行判断如何反转。但是实际上不需要这样子。如下图所示(来源于代码随想录) 也就是说 我们只需要确定2k个为一组的字符串,然后反转他的前k个,如果说是奇数个字符比如说’abcde'我们2k之后剩下一个e,需要反转吗? 当然不需要!因为e是我们下一个2k组中的东西 不需要在当前组中进行反转 代码:
?Leetcode05 替换空格 链接:剑指 Offer 05. 替换空格 - 力扣(LeetCode) 这道题相对简单。 那么如果让你使用双指针的方法你会吗? 代码:
暴力思路:首先找到对应的" "空格索引,然后用题目给的值替换掉,最后重新join组成新的字符串 双指针法: 首先扩充数组到每个空格替换成"%20"之后的大小。?然后从后向前替换空格,也就是双指针法,过程如下:?i指向新长度的末尾,j指向旧长度的末尾。 ?(来源于代码随想录) 为什么这里是从后往前填充?而不是从前向后呢? 因为从前向后会导致后面的元素集体往后移动,时间复杂度就变高了。 ? ?所以从后往前填充的好处就是:
代码:
Leetcode151 反转字符串中的单词 链接:151. 反转字符串中的单词 - 力扣(LeetCode) ?思路: 经过了相当长时间的思考!我对这道题已经有了充分理解 总的来说 这道题的思路很巧妙 如果没有掌握这个思路 比较困难实现(针对我个人) 第一步: 把当前字符中的元素都挑出来存到一个数组中去,目的是为了去除前后空格, 如果我们过程中遇到了空格那就跳过这个元素,但是包括单词之间间隔的空格,也就是说判断上一次添加的元素是不是空格,如果不是,那么就可以添加,说明我们没有连续两次添加空格! 这样子输出的结果是['t', 'h', 'e', ' ', 's', 'k', 'y', ' ', 'i', 's', ' ', 'b', 'l', 'u', 'e'] 第二步: 对于当前数组中的元素进行反转, 也就是我们反转字符串的那道题,直接首位互换。 将会输出:['e', 'u', 'l', 'b', ' ', 's', 'i', ' ', 'y', 'k', 's', ' ', 'e', 'h', 't'] 第三步: 做整体的单词反转! 也就是对一个数组中的每个单词进行反转 这里我们定义一个start&end都等于0,目的为了保证我们的头单词不变,然后end循环到空格的时候停下,直接调用我们的这个reverse_array()方法,传入的参数就是当前的数组,start,end的位置。 然后就把我们当前这个’e','u','l','b'成功的反转了。 之后! start需要更新位置,更新到当前n 的后一位,也就是空格之后的新单词。 所以 start = end+1,然后end+=1。 然后重复的,当我们的end下一次遇到空格的时候,我们start依然指向单词的第一个元素,end指向当前单子后面的空格,然后调用reverse_words函数 最后当我们的end更新到最后,start = end+1u已经循环完毕,直接退出循环。 然后用join连接成一组新的字符串返回。 哈哈哈哈哈哈哈我终于懂了!!!!!!! 先把代码附上:
Leetcode剑指Offer58-II.左旋转字符串 链接:剑指 Offer 58 - II. 左旋转字符串 - 力扣(LeetCode) ?思路: 通过局部反转+整体反转 达到左旋转的目的。 具体步骤为:
最后就可以得到左旋n的目的,而不用定义新的字符串,完全在本串上操作。 例如 :示例1中 输入:字符串abcdefg,n=2 (来源于代码随想录)? 代码:
总结:反转单词是目前遇到的最难的一道题之一 需要好好的啃啃!!!!! 睡觉! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:24:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |