单词——434、58

434. 字符串中的单词数

解法一、分割再正则表达式

不用猜就知道时间复杂度很高,主要是想写正则了

\S是非空白 .*是前后匹配任意字符

class Solution {
    public static int countSegments(String s) {
        if(s.length() < 1)return 0;
        int sum = 0;
        String [] temp = s.split(" ");
        for(int i = 0;i < temp.length;i++){
            if(temp[i].matches(".*\\S.*")){
                sum++;
            }
        }
        return sum;
    }
}

解法二、原地法

其实和之前那道战舰题有异曲同工之妙?只要考虑每个segment的开头一个字母就好。简化思路,省略判断,减少码量,增加可读性。

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

        for (int i = 0; i < s.length(); i++) {
            if ((i == 0 || s.charAt(i - 1) == ' ') && s.charAt(i) != ' ') {
                segmentCount++;
            }
        }

        return segmentCount;
    }
}

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

 
58. 最后一个单词的长度

解法一、从后遍历

从后往前。一旦遇到第一个是字母的,就用while抓住它为基点进行遍历。

力扣是真喜欢出空的数据啊。。记得讨论边界情况

class Solution {
    public static int lengthOfLastWord(String s) {
        int len = s.length();
        if(len == 0)return 0;
        int res = 0;
        for(int i = len - 1;i >= 0;i--){
            if(Character.isLetter(s.charAt(i))){
                while (i >= 0&&Character.isLetter(s.charAt(i))){
                    i--;
                    res++;
                }
                return res;
            }
        }
        return res;
    }
}

 解法二、正则表达式

正门!(原来表达式是一种语法而不是一种函数,虽然早就知道,但放在split里才有意识

   // 使用正则表达式匹配所有单词
        String[] words = s.split("\\s+");
        // 返回最后一个单词的长度
        if (words.length == 0) {
            return 0;
        }
        return words[words.length - 1].length();

解法三、API战士

class Solution {
    public int lengthOfLastWord(String s) {
        s = s.trim();
        return s.length() - s.lastIndexOf(" ") - 1;
    }
}

碎碎念

  • s.lastIndexOf(" ") 返回字符串 s 中最后一个空格字符的位置。
  • s.trim() 方法去除字符串 s 两端的所有空白字符(包括空格、制表符等)。
  • 字符串相关基础题真是有认识的api就会很爽(还是要抓紧基础吧,不过目前感觉还是数组遍历问题···
  • 正门!
  • ↓你会背吗存了就是背了反正我不背

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值