当前位置: 首页 > article >正文

刷题——字符串中的单词数(力扣)

文章目录

  • 一、读题
  • 二、思路
    • 问题1:
    • 解决思路:
    • 分割方法:
      • 方法1、
      • 方法2、
  • 三、代码实现:
    • 方法1、
    • 方法2、

一、读题

    题目来源:https://leetcode.cn/problems/number-of-segments-in-a-string/description/

    首先看例子,“Hello, my name is
john”里面有5个单词,那么就是Hello, my name is john这5个单词,很明显是由空格进行分割的

二、思路

    大思路:由空格进行分割,可以自己定义以空格为分界分割的方法,然后通过循环进行分割,也可以使用JavaString类自带的API进行分割,最终将单词数返回即可

问题1:

    首先是分割的问题,因为是以空格为界线进行分割的,那如果碰上多个空格连续在一起应该如何处理?如果空格连续在一起,也就是多个空格连续出现的时候,如果单单是按照空格进行分割的话,大概率会出现空的情况(这里的空并非是null,而是真正意义上的空,就是什么都不存储但是这个存储空间真实存在)

在这里插入图片描述

    以空格为分界进行分割,当两个空格同时在一起的时候就会出现两个空格都被当成了分界进行分割,从而有空的情况出现。

解决思路:

    解决该问题,我们需要在字符串被分割出来了之后,在计算单词数的时候进行判断,只要是被分割出来的“单词”的长度不为0,或者不等于空,那么我们就将其视为单词;如果长度为0,或者等于空,那么该“单词”就不是真正的单词。
    

    将字符串以空格为界线进行分割,并且分割出来的是单词,因此分割出来的肯定是字符串,字符串在为空的情况下,长度肯定是0,或者是使用String重写的equals()方法进行判断,该“单词”是否等于空。

分割方法:

方法1、

    我们可以定义一个方法,将字符串和分割界线传进去,在方法里面对字符串进行遍历,如果遇到分割界线就将前面的字符串切割给存储到数组里面,再继续遍历再次遇到空格就再将前面的字符串切割存储到数组里,以此类推。

方法2、

    同样也可以使用JavaString类自带的API,使用split(String)方法,用一个String数组进行接收即可。

三、代码实现:

方法1、

    public int countSegments(String s) {
        if(s != null) {//判断s是否为空
            String[] str = s.split(" ");//使用split()方法分割字符串
            int count = 0;//定义计数器,如果为真正的单词就加一,为假单词则不变
//遍历Str数组,判断数组内容是否存在假单词
            for(int i = 0 ; i < str.length ; i++) {
                if(!str[i].equals("")) {//使用equals()方法判断是否是假单词
                    count++;
                }
            }
            return count;
        }
        return 0;
    }

方法2、

    public int countSegments(String s) {
        if(s != null) {//判断s是否为空
            String[] str = s.split(" ");//使用split()方法分割字符串
            int count = 0;//定义计数器,如果为真正的单词就加一,为假单词则不变
//遍历Str数组,判断数组内容是否存在假单词
            for(int i = 0 ; i < str.length ; i++) {
                if(str[i].length() != 0) {//通过字符串的长度来判断是否是假单词
                    count++;
                }
            }
            return count;
        }
        return 0;
    }

http://www.kler.cn/a/410654.html

相关文章:

  • UE5肉鸽游戏教程学习
  • 正则表达式灾难:重新认识“KISS原则”的意义
  • 网络原理(一):应用层自定义协议的信息组织格式 初始 HTTP
  • 实验二 系统响应及系统稳定性
  • 开发者视角下的鸿蒙
  • redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)
  • 使用Java代码操作Kafka(五):Kafka消费 offset API,包含指定 Offset 消费以及指定时间消费
  • unsloth vlm模型Qwen2-VL、Llama 3.2 Vision微调案例
  • 基于LLaMA完成第一个微调
  • skywalking es查询整理
  • 【Axure高保真原型】或和且条件
  • 两个docker之间的服务相互访问
  • 初学 flutter 环境变量配置
  • node报错:Error: Cannot find module ‘express‘
  • sklearn中常用数据集简介
  • 深度学习之图像分割
  • 【R语言管理】Pycharm配置R语言及使用Anaconda管理R语言虚拟环境
  • 裸金属服务器能够帮助企业解决哪些问题?
  • 【Java】二叉树:数据海洋中灯塔式结构探秘(上)
  • Hive的基础函数-日期函数
  • 【从经典到最新】28种信号分解方法,EMD类,VMD类,小波类,FMD、多元分解等(附matlab代码)
  • HDMI转VGA方案 LT8612UX(HDMI2.0) LT8612SX LT8511EX LT8522EX LT8612EX_e(HDMI1.4)
  • 企业数字化转型现状
  • 学习日志016--python实现双向循环列表与链栈
  • 软件测试丨Python语法与数据结构
  • C++【面试重要题目】 只出现一次的数字的集合.