当前位置: 首页 > news >正文

LeetCode 面试经典 150_数组/字符串_最后一个单词的长度(19_58_C++_简单)(反向遍历)

LeetCode 面试经典 150_数组/字符串_最后一个单词的长度(19_58_C++_简单)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(反向遍历):
      • 代码实现
        • 代码实现(思路一(反向遍历)):
        • 代码实现(对思路一代码进行优化):
        • 以思路一为例进行调试

题目描述:

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

输入输出样例:

示例 1:
输入:s = “Hello World”
输出:5
解释:最后一个单词是“World”,长度为 5。

示例 2:
输入:s = " fly me to the moon "
输出:4
解释:最后一个单词是“moon”,长度为 4。

示例 3:
输入:s = “luffy is still joyboy”
输出:6
解释:最后一个单词是长度为 6 的“joyboy”。

提示:
1 <= s.length <= 104
s 仅有英文字母和空格 ’ ’ 组成
s 中至少存在一个单词

题解:

解题思路:

思路一(反向遍历):

1、可以从后向前遍历字符串,当碰到第一个字母时开始计数,当碰到空格时停止计数。

2、复杂度分析:
① 时间复杂度:O(n),n 代表字符串中字符的个数,最坏的情况需要遍历整个字符串。
② 空间复杂度:O(1)。

代码实现

代码实现(思路一(反向遍历)):
class Solution1 {
public:// 计算字符串 s 中最后一个单词的长度int lengthOfLastWord(string s) {// 从字符串的最后一个字符开始int i = s.size() - 1;// 向前跳过字符串末尾的空格或非字母字符while (!isalpha(s[i])) {i--;}// 记录最后一个单词的长度int ans = 0;// 继续向前遍历,直到遇到非字母字符或遍历完字符串while (i >= 0 && isalpha(s[i])) {ans++;  // 每遇到一个字母,长度加 1i--;     // 向前移动}// 返回最后一个单词的长度return ans;}
};
代码实现(对思路一代码进行优化):
/** 因除字母外的字符只包含字空格,所以我们可以判断当前字符是否为空格来计算出字符串中 最后一个 单词的长度。* 判断字母最多需要四个判断(c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); 而空格的判断只需要一个 * */class Solution2 {
public:// 计算字符串 s 中最后一个单词的长度int lengthOfLastWord(string s) {// 从字符串的最后一个字符开始int i = s.size() - 1;// 向前跳过字符串末尾的空格// 如果遇到空格,继续向前跳过直到遇到非空格字符while (i >= 0 && s[i] == ' ') {i--;}// 记录最后一个单词的长度int ans = 0;// 继续向前遍历,直到遇到空格或遍历完字符串// 这里判断非空格字符,来识别最后一个单词while (i >= 0 && s[i] != ' ') {ans++;  // 每遇到一个字符,单词长度加 1i--;     // 向前移动}// 返回最后一个单词的长度return ans;}
};
以思路一为例进行调试
#include<iostream>
#include<vector>
using namespace std;class Solution1 {
public:// 计算字符串 s 中最后一个单词的长度int lengthOfLastWord(string s) {// 从字符串的最后一个字符开始int i = s.size() - 1;// 向前跳过字符串末尾的空格或非字母字符while (!isalpha(s[i])) {i--;}// 记录最后一个单词的长度int ans = 0;// 继续向前遍历,直到遇到非字母字符或遍历完字符串while (i >= 0 && isalpha(s[i])) {ans++;  // 每遇到一个字母,长度加 1i--;     // 向前移动}// 返回最后一个单词的长度return ans;}
};int main(int argc, char const *argv[])
{string str="luffy is still joyboy";Solution1 s;cout<<s.lengthOfLastWord(str);return 0;
}

LeetCode 面试经典 150_数组/字符串_最后一个单词的长度(19_58)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

http://www.dtcms.com/a/330488.html

相关文章:

  • 百川开源大模型Baichuan-M2的医疗能力登顶第一?
  • 【机器人-开发工具】ROS 2 (4)Jetson Nano 系统Ubuntu22.04安装ROS 2 Humble版本
  • OpenBMC中C++策略模式架构、原理与应用
  • AI数据仓库的核心优势解析
  • 设计模式基础概念(行为模式):策略模式
  • 【java实现一个接口多个实现类通用策略模式】
  • [Oracle数据库] ORACLE基本DML操作
  • 【软件测试】自动化测试 — selenium快速上手
  • Java设计模式之《策略模式》
  • STM32L051C8与STM32L151C8的主要区别
  • visual studio调试cmake项目记录
  • 用飞算JavaAI一键生成电商平台项目:从需求到落地的高效实践
  • 远程影音访问:通过 cpolar 内网穿透服务使用 LibreTV
  • Mybatis学习笔记(九)
  • Spring Boot + Redis + 布隆过滤器防止缓存穿透
  • [已解决]当启动 Spring Boot 应用时出现 Using generated security password xxx提示
  • OpenCV 视频处理全解析
  • EI学术会议 | 可再生能源、智能电网、电力系统优化、能源存储技术
  • Linux系统Namespace隔离实战:dd/mkfs/mount/unshare命令组合应用
  • 缓存元数据损坏操作步骤(lvmcache修复)
  • 微软推出AI恶意软件检测智能体 Project Ire
  • 截断重要性采样(TIS)在医疗AI大模型训练中的优化路径
  • 嵌入式领域,ROM和RAM的区别
  • pytorch学习笔记-Loss的使用、在神经网络中加入Loss、优化器(optimizer)的使用
  • 基于SpringBoot+Vue的轻手工创意分享平台(WebSocket即时通讯、协同过滤算法、Echarts图形化分析)
  • 依托AR远程协助,沟通协作,高效流畅
  • 七、SpringBoot工程日志设置
  • [前端算法]动态规划
  • 【保姆级教程】CentOS 7 部署 FastDFS 全流程(避坑指南)
  • 【Docker】安装kafka案例