• 力扣算法题—058最后一个单词长度


    给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。

    如果不存在最后一个单词,请返回 0 。

    说明:一个单词是指由字母组成,但不包含任何空格的字符串。

     1 #include "000库函数.h"
     2 
     3 //用stringAPI
     4 class Solution {
     5 public:
     6     int lengthOfLastWord(string s) {
     7         int i = s.rfind(' ');//查找空格
     8         if(i==-1)return s.size();//无空格,整个字符串即为一个单词,包括空字符
     9         if (i == s.size() - 1) {//最后为空格,再向前找空格
    10             s.erase(i, 1);//删除最后一个空格再去找
    11             return lengthOfLastWord(s);
    12         }
    13         return s.size() - i - 1;
    14     }
    15 };
    16 
    17 //不该用递归,会加长时间和空间
    18 //给一个空格标志就行
    19 //好吧,比上面的时间复杂度高,但空间复杂度小
    20 class Solution {
    21 public:
    22     int lengthOfLastWord(string s) {
    23         int len = 0;
    24         for (int i = 0; i < s.size(); ++i) {
    25             if (i > 0 && s[i] != ' '&&s[i - 1] == ' ')
    26                 len = 0;//遇到下一个单词,重新计算
    27             if (s[i] != ' ')
    28                 len++;//计算该单词的长度
    29         }
    30         return len;//返回的记录即使最后一个单词长度
    31     }
    32 };
    33 
    34 
    35 
    36 //我们关心的主要是非空格的字符,那么我们实际上在遍历字符串的时候,
    37 //如果遇到非空格的字符,我们只需要判断其前面一个位置的字符是否为空格,
    38 //如果是的话,那么当前肯定是一个新词的开始,将计数器重置为1,如果不是的话,
    39 //说明正在统计一个词的长度,计数器自增1即可。但是需要注意的是,当i = 0的时候,
    40 //无法访问前一个字符,所以这种情况要特别判断一下,归为计数器自增1那类。参见代码如下:
    41 
    42 
    43 class Solution {
    44 public:
    45     int lengthOfLastWord(string s) {
    46         int res = 0;
    47         for (int i = 0; i < s.size(); ++i) {
    48             if (s[i] != ' ') {
    49                 if (i != 0 && s[i - 1] == ' ') res = 1;
    50                 else ++res;
    51             }
    52         }
    53         return res;
    54     }
    55 };
    56 
    57 
    58 
    59 //由于我们只关于最后一个单词的长度,所以开头有多少个空格起始我们并不在意,
    60 //我们从字符串末尾开始,先将末尾的空格都去掉,然后开始找非空格的字符的长度即可,参见代码如下:
    61 
    62 
    63 
    64 class Solution {
    65 public:
    66     int lengthOfLastWord(string s) {
    67         int right = s.size() - 1, res = 0;
    68         while (right >= 0 && s[right] == ' ') --right;
    69         while (right >= 0 && s[right] != ' ') {
    70             --right;
    71             ++res;
    72         }
    73         return res;
    74     }
    75 };
    76 
    77 
    78 void T058() {
    79     Solution sv;
    80     string s;
    81     s = "";
    82     cout << s << endl << sv.lengthOfLastWord(s) << endl;
    83     s = " ";
    84     cout << s << endl << sv.lengthOfLastWord(s) << endl;
    85     s = " asdff afd ";
    86     cout << s << endl << sv.lengthOfLastWord(s) << endl;
    87     s = "asd asdfa asdafsgasagsds";
    88     cout << s << endl << sv.lengthOfLastWord(s) << endl;
    89 }
  • 相关阅读:
    「ZJOI2019」开关 (概率期望+FWT)
    FJWC2020 Day3 题解
    FJWC2020 Day1 题解
    「ZJOI2019」Minimax 搜索(动态dp)
    「十二省联考 2019」希望(长链剖分优化dp)
    CF1097F Alex and a TV Show(莫比乌斯反演+bitset)
    [Luogu#4707] 重返现世(minmax容斥+背包dp)
    201871010105曹玉中《面向对象程序设计(java)》第十周学习总结 曹玉中
    201871010105曹玉中《面向对象程序设计(Java)》第一周学习总结 曹玉中
    201871010105曹玉中《面向对象程序设计(java)》第四周学习总结 曹玉中
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10649645.html
Copyright © 2020-2023  润新知