1816. 截断句子 : 简单字符串模拟题

简介: 1816. 截断句子 : 简单字符串模拟题

网络异常,图片无法展示
|

题目描述



这是 LeetCode 上的 1816. 截断句子 ,难度为 简单


Tag : 「模拟」


句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。

每个单词仅由大小写英文字母组成(不含标点符号)。


例如,"Hello World""HELLO""hello world hello world" 都是句子。 给你一个句子 s 和一个整数 k ,请你将 s 截断 ,使截断后的句子仅含 前 k 个单词。返回 截断 s 后得到的句子。


示例 1:


输入:s = "Hello how are you Contestant", k = 4
输出:"Hello how are you"
解释:
s 中的单词为 ["Hello", "how" "are", "you", "Contestant"]
前 4 个单词为 ["Hello", "how", "are", "you"]
因此,应当返回 "Hello how are you"
复制代码


示例 2:


输入:s = "What is the solution to this problem", k = 4
输出:"What is the solution"
解释:
s 中的单词为 ["What", "is" "the", "solution", "to", "this", "problem"]
前 4 个单词为 ["What", "is", "the", "solution"]
因此,应当返回 "What is the solution"
复制代码


示例 3:


输入:s = "chopper is not a tanuki", k = 5
输出:"chopper is not a tanuki"
复制代码


提示:


  • 1 <= s.length <= 500
  • k 的取值范围是 [1,  s 中单词的数目]
  • s 仅由大小写英文字母和空格组成
  • s 中的单词之间由单个空格隔开
  • 不存在前导或尾随空格


模拟



根据题意进行模拟,在拼接答案时对「空格」进行计数即可。


可通过 StringBuilder 实现拼接,也可以使用变量 idx 记录答案的结尾位置。


代码:


class Solution {
    public String truncateSentence(String s, int k) {
        StringBuilder sb = new StringBuilder();
        int n = s.length();
        for (int i = 0, cnt = 0; i < n && cnt < k; i++) {
            char c = s.charAt(i);
            if (c == ' ') cnt++;
            if (cnt < k) sb.append(c);
        }
        return sb.toString();
    }
}
复制代码


class Solution {
    public String truncateSentence(String s, int k) {
        int n = s.length(), idx = 0;
        while (idx < n) {
            if (s.charAt(idx) == ' ' && --k == 0) break;
            idx++;
        }
        return s.substring(0, idx);
    }
}
复制代码


  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(n)O(n)


最后



这是我们「刷穿 LeetCode」系列文章的第 No.1816 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。


在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。


为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…


在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

相关文章
|
Web App开发 Linux
linux(三十九)linux软件包管理RPM
linux(三十九)linux软件包管理RPM
280 0
|
21天前
|
缓存 Unix Android开发
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
117 8
|
2月前
|
JSON 搜索推荐 API
小红书笔记列表API数据解析(附代码)
本内容介绍如何利用小红书开放平台的笔记列表API,批量获取与关键词或用户相关的笔记数据,包括标题、封面图、互动数据等。接口支持按关键词分页查询及排序筛选,适用于内容聚合与用户分析。附Python示例代码,演示通过GET请求调用API的方法,并处理返回的JSON数据。
|
9月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
341 20
|
8月前
|
机器学习/深度学习 存储
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
263 0
RT-DETR改进策略【模型轻量化】| PP-LCNet:轻量级的CPU卷积神经网络
|
10月前
|
机器学习/深度学习 人工智能 算法
转载:【AI系统】AI系统概述与设计目标
本文介绍了AI系统全栈架构,涵盖AI系统的设计目标、组成和生态,强调了系统性能、用户体验、稳定性及开源社区运营的重要性。文章详细解析了AI系统的基本概念、定义及其设计挑战,旨在为读者构建AI系统知识体系,助力AI技术的全面发展。通过对比传统软件和云计算架构,阐述了AI系统在连接硬件与应用间的独特作用,探讨了高效编程语言、开发框架和工具链的设计,以及AI任务的系统级支持,包括计算能力的扩展、自动编译优化、云原生自动分布式化等方面,为应对AI技术的新挑战提供了全面视角。
|
存储 关系型数据库 MySQL
[mysql]MGR简介与部署
[mysql]MGR简介与部署
288 1
|
机器学习/深度学习 人工智能
论文介绍:深入解析神经语言模型的规模定律
【4月更文挑战第2天】OpenAI的论文《Scaling Laws for Neural Language Models》探索了模型规模、数据量和计算资源与性能的幂律关系。研究发现,增大模型参数、数据集和计算投入能按幂律提升性能,且模型性能与架构细节关联较小。大型模型在样本效率上更优,能在少量数据上达到与小型模型相当的性能。尽管存在理论解释和数据规模等方面的局限性,该研究为优化资源分配和设计高性能语言模型提供了关键洞见。
243 2
论文介绍:深入解析神经语言模型的规模定律
|
弹性计算 NoSQL MongoDB
用云服务器ECS玩转Leanote个人云笔记
本教程将介绍如何搭建个人Leanote云笔记。
149832 7
|
机器学习/深度学习 存储 算法
OpenCV与NumPy:图像处理中的黄金组合
【4月更文挑战第17天】OpenCV和NumPy是Python图像处理的两大利器,互补协作形成黄金组合。OpenCV专注计算机视觉,提供丰富算法,而NumPy擅长数值计算和数组操作。两者无缝对接,共同实现高效、灵活的图像处理任务。通过灰度化、二值化、边缘检测等案例,展示了它们的协同作用。未来,这一组合将在计算机视觉和机器学习领域发挥更大作用,解锁更多图像处理潜力。