这是悦乐书的第155次更新,第157篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第14题(顺位题号是58)。给定一个字符串,包含戴尔字母、小写字母和空格,返回最后一个单词的长度,如果最后一个单词不存在则返回0。另外,单词不包含空格。例如:

输入: "Hello World"
输出: 5
说明:最后一个单词为world,其长度为5

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

第一步考虑特殊情况,传入的字符串全部由空格组成,这时可以直接返回0。

第二步,获取最后一个单词结束字符的位置。

既然是获取最后一个单词,那么最后一个单词的情况分两种:以单词结尾;不已单词结尾,后面还带了空格。

先将字符串转为字符数组,从后往前依次获取每一个字符,如果遇到空格,继续向前循环,直到第一个字符;反之则表示遇到了一个单词,将其位置记录为end。

第三步,获取最后一个单词开始字符的位置。接着第二步的索引继续向前判断,不过判断的条件变成了不等于空格,直到条件不满足,则表示此单词已经查找完毕,将其位置记录为start。

第三步,用end减去start,即为最后一个单词的长度。

public int lengthOfLastWord(String s) {if("".equals(s.trim())) { return 0; }int n = s.length()-1;char[] ch = s.toCharArray();while (n >= 0 && ch[n] == ' ') {n--;}int end = n;while(n >= 0 && ch[n] != ' ') {n--;}int start = n;return end - start;
}

03 第二种解法

既然此字符串是由大小写字母和空格组成,那么是否可以使用空字符串将其分割为多个子字符串?如果原字符串不包含空格,那么分割后还是该字符串;如果包含字符串,那么最后一个被分割出来的子字符串就是我们想要的最后的一个单词。和第一种解法最开始一样,特殊情况也是要考虑进去的。

public int lengthOfLastWord2(String s) {if("".equals(s.trim())) { return 0; }if (s.length() ==0 || s.indexOf(" ") == -1) {return s.length();}String[] arr = s.split(" ");return arr[arr.length-1].length();
}

04 第三种解法

将原字符串首尾的空格去掉,然后找到最后一次出现空格的位置,两者相减再减1即为最后单词的长度。

public int lengthOfLastWord3(String s) {return s.trim().length()-s.trim().lastIndexOf(" ")-1;
}

05 小结

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

转载于:https://www.cnblogs.com/xiaochuan94/p/9868564.html

【算法】LeetCode算法题-Length Of Last Word相关推荐

  1. 面试算法LeetCode刷题班—BAT面试官带你刷真题、过笔试

    课程名称: <面试算法LeetCode刷题班> --BAT面试官带你刷真题.过笔试 主讲老师: 林老师 BAT资深研发工程师(T7/P8级),致力于搜索引擎及其子系统的研发.迭代与优化,数 ...

  2. LeetCode刷题记录11——290. Word Pattern(easy)

    LeetCode刷题记录11--290. Word Pattern(easy) 目录 LeetCode刷题记录11--290. Word Pattern(easy) 题目 语言 思路 源码 后记 题目 ...

  3. 零基础新手学习算法Leetcode刷题指南

    刷算法到底在刷什么?这是很多人会想不明白的.而算法为什么这么重要,今天想说下这块内容.市面上都在说不要重复造轮子,这里说的不是你在一开始就不造轮子. 我们学习成长的过程是,先模仿,后改造,最终创新.所 ...

  4. python基础刷题_数据结构与算法LeetCode刷题(Python)

    参考资料: 一.链表 1.  链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2.  链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...

  5. 如何判断链表中是否存在环?Floyd判圈算法 leetcode刷题笔记 142. 环形链表 II

    这道题使用了floyd判圈算法,所以先讲解floyd算法的原理和实现,最后在附加上第142题的代码. floyd算法: 一.用途: 可以在有限状态机.迭代函数或者链表上判断是否存在环,求出该环的起点与 ...

  6. 基础夯实,字节内部总结240道算法LeetCode刷题笔记,直呼太全

    1.什么是算法 算法(algorithm,[ˈælɡərɪðəm],计算程序):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出.简单来说算法就是一系列的计算步骤,用来将 ...

  7. LeetCode刷题(50)--Word Search

    DFS算法 class Solution(object):def exist(self, board, word):""":type board: List[List[s ...

  8. LeetCode算法题-Detect Capital(Java实现)

    这是悦乐书的第251次更新,第264篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第118题(顺位题号是520).给定一个单词,你需要判断其中大写字母的使用是否正确.当下 ...

  9. 算法记录 牛客网 leetcode刷题记录

    算法记录 & 牛客网 & leetcode刷题记录 解题思路 STL容器 常用算法模板 堆排序 插入排序 快速排序 BFS层序遍历 二叉树 JZ55 二叉树的深度 BST(binary ...

  10. c语言贪心算法合并箭,LeetCode刷题题库:贪心算法

    LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

最新文章

  1. 网管员应掌握好的学习方法
  2. GridView中的RadioButton列之间不能互斥
  3. 常用 Java Profiling 工具的分析与比较
  4. python百题百练 二级题目_CSDN Python语感百题(一)
  5. android 多参数,玩转Android monkey之多参数实战
  6. 3.13 判读是否是对称素数
  7. C++学习笔记系列二
  8. AI Hero 算法挑战赛,万元奖金等你来拿!
  9. VB 和Flex交互总结
  10. Android学习小Demo(12)TodoList实现ListView的分组实现
  11. 帝国CMS 二级联动 基于optionTree插件
  12. pythopn tuple(元组)
  13. 在 MAC下安装 Exuberant ctags
  14. 【转】推荐一款Java反编译器,比较好用
  15. 咸宁php培训,PHP培训
  16. Linux学习笔记之CentOS7的 wheel组
  17. 超文本传输协议(HTTP)
  18. 100个python算法超详细讲解:最佳存款方案
  19. 计算机专业英语职高 试卷,2020年河南高职单招英语样卷及答案分享
  20. awk以空格为分隔符的问题

热门文章

  1. 结构体内存对齐的原则及原理
  2. PHP线程安全和非线程安全有什么区别
  3. ucgui移植到rt_thread simulator
  4. vue____后台管理系统搭建(推荐,懒得自己写了)
  5. 亿级爆款背后,网易云音乐的生长之道
  6. 转载:牛客练习赛17 c 规律题
  7. poj 2065 SETI(gauss---≡)
  8. PHP7-MySQLi在分页中的应用
  9. c#:浅克隆和深克隆,序列化和反序列化
  10. Windows 之间用rsync同步数据(cwRsyncServer配置)