欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

leetcode刷题---字符串---字符串中的单词数

程序员文章站 2022-03-15 15:02:32
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。示例:输入: “Hello, my name is John”输出: 5解释: 这里的单词是指连续的不是空格的字符,所以 “Hello,” 算作 1 个单词。拿到这题的时候我写的是这种写法class Solution { public int countSegments(String s) { int count=0; for(int i=0;i

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。

请注意,你可以假定字符串里不包括任何不可打印的字符。

示例:

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

拿到这题的时候我写的是这种写法

class Solution {
    public int countSegments(String s) {
    int count=0;

    for(int i=0;i<s.length();){

        while(s.charAt(i)!=' '&&i<s.length()){
            i++;
        }
        count++;
       

    }
    return count;
    }
}

只是这种写法提示时间超出限制
后来去看了题解之后,进行了更改

class Solution {
    public int countSegments(String s) {
    int count=0;

    for(int i=0;i<s.length();i++){

        if ((i == 0 || s.charAt(i-1) == ' ') && s.charAt(i) != ' ') {
                count++;
            }

    }
    return count;
    }
}

猜测是while循环使用不恰当导致的,以后注意
附上题解中给这种思路的解释:
计算单词的数量,就等同于计数单词开始的下标个数。因此,只需要定义好下标的条件,就可以遍历整个字符串,检测每个下标。定义如下:若该下标前为空格(或者为初始下标),且自身不为空格,则其为单词开始的下标。该条件可以以常数时间检测。最后,返回满足条件的下标个数。

内置函数解法

此外题解中还提到了使用内置方法的解法
本问题有一些边缘情况需要考虑,至少在Java中如此。首先,开头的一个或多个空格会导致 split 函数在字符串开头产生一个错误的 “”,因此我们使用内置的 trim 函数来移除这些空格。其次,如果结果为空字符串,可以直接输出 0。由于 split 函数的下述特性,这一点很重要:

String[] tokens = “”.split("\s++");
tokens.length; // 1
tokens[0]; // “”

当抵达最后的 return 语句,我们将修整过的字符串以一个或多个空格字符切分(split 函数可以使用正则表达式),并返回结果数组的长度。

用 Python 写的代码要短很多,这是由于 Python 的 split 函数和 Java 相比有很多不同之处,更加适合此类问题。值得注意的是,当对空字符串使用 split 时,会返回空数组。这是由于 Python 会在 split 之前隐式地调用 trim (在Python lingo 中是 strip)。

class Solution {
    public int countSegments(String s) {
        String trimmed = s.trim();
        if (trimmed.equals("")) {
            return 0;
        }
        return trimmed.split("\\s+").length;
    }
}


代码中的trim的作用是去除掉边缘的空格,比如首部的空格
split函数的作用是将字符串依据规则分割成字符串数组
这里的"\\s+"的含义需要分开来理解,\\s的含义是空格,回车,换行等空白符, 而+的含义是表示一个或多个的意思。所以结合起来看就是以一个或多个空格来作为标志去分割字符串。

作者:LeetCode
链接:https://leetcode-cn.com/problems/number-of-segments-in-a-string/solution/zi-fu-chuan-zhong-de-dan-ci-shu-by-leetcode/
来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-segments-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本文地址:https://blog.csdn.net/weixin_46428711/article/details/110866521