来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-segments-in-a-string/

描述

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。

示例:
输入: “Hello, my name is John”
输出: 5
解释: 这里的单词是指连续的不是空格的字符,所以 “Hello,” 算作 1 个单词。

题解

内置

  1. class Solution {
  2. public int countSegments(String s) {
  3. String trimmed = s.trim();
  4. if (trimmed.equals("")) {
  5. return 0;
  6. }
  7. return trimmed.split("\\s+").length;
  8. }
  9. }

复杂度分析

  • 时间复杂度 : 434. 字符串中的单词数(Number of Segments in a String) - 图1。这里用到的内置函数的时间复杂度或为434. 字符串中的单词数(Number of Segments in a String) - 图2,或为434. 字符串中的单词数(Number of Segments in a String) - 图3,故整个算法可以在线性复杂度内完成。
  • 空间复杂度 : 434. 字符串中的单词数(Number of Segments in a String) - 图4。split函数返回长度为434. 字符串中的单词数(Number of Segments in a String) - 图5的数组/列表,故算法使用线性的额外空间。

    原地

    1. class Solution {
    2. public int countSegments(String s) {
    3. int segmentCount = 0;
    4. for (int i = 0; i < s.length(); i++) {
    5. if ((i == 0 || s.charAt(i-1) == ' ') && s.charAt(i) != ' ') {
    6. segmentCount++;
    7. }
    8. }
    9. return segmentCount;
    10. }
    11. }

    复杂度分析

  • 时间复杂度 : 434. 字符串中的单词数(Number of Segments in a String) - 图6。对每个下标进行常数时间的检测。

  • 空间复杂度 : 434. 字符串中的单词数(Number of Segments in a String) - 图7。只使用了额外的几个整数,因此使用的空间为常数。