当前位置: 首页> 健康> 母婴 > LeetCode面试题Day9|LeetCode58 最后一个单词的长度、LeetCode151 反转字符串中的单词

LeetCode面试题Day9|LeetCode58 最后一个单词的长度、LeetCode151 反转字符串中的单词

时间:2025/7/17 15:31:30来源:https://blog.csdn.net/m0_74174715/article/details/141164214 浏览次数:0次

题目1:

指路:

. - 力扣(LeetCode)58 最后一个单词的长度

思路与分析:

求最后一个单词的长度,最普遍的思路应该是从后往前遍历,定义一个计数器,遇到第一个非空格的字母则使计数器加一,直到遇到空格停止,此时计数器的值就是最后一个单词长度。

代码:

class Solution {
public:int lengthOfLastWord(string s) {int ans = 0;  // 单词长度for (int i = s.size() - 1; i >= 0; i--) {if (s[i] != ' ') ans++;  // 非空格长度加1if (ans != 0 && s[i] == ' ') break;}return ans;}
};

题目2:

指路:

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

思路与分析:

两个工作:将字符串中的单词翻转顺序并去除多于一个的空格。首先完成单词的翻转。很显然定义两个下标分别指向字符串的首尾,通过swap函数进行交换。接下来进行多余空格的去除,核心思想为去除单词间的所有空格最后在单词间添加一个空格。其中,定义一个满指针slow,其含义为去除多余空格后的大小。最后还需保证字符串中首尾没有多余空格。

代码:

class Solution {
public:void reverse(string& s, int start, int end) {for (int i = start, j = end ; i < j; i++, j--) {swap(s[i], s[j]);}}void removeExtraSpace(string& s) {int slow = 0;for (int i = 0; i < s.size(); ++i) {if (s[i] != ' ') {if (slow != 0)s[slow++] = ' ';while (i < s.size() && s[i] != ' ') {s[slow++] = s[i++];}}}s.resize(slow);}string reverseWords(string s) {removeExtraSpace(s);reverse(s, 0, s.size() - 1);int start = 0;for (int i = 0; i <= s.size(); i++) {if (i == s.size() || s[i] == ' ') {reverse(s, start, i - 1);start = i + 1;}}return s;}
};

关键字:LeetCode面试题Day9|LeetCode58 最后一个单词的长度、LeetCode151 反转字符串中的单词

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: