每日一练 · 截断句子

135 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

一、题目描述:

句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。

例如,"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 中的单词之间由单个空格隔开 不存在前导或尾随空格

二、思路分析:

这题也比较简单,先把字符串转化为字符数组,输出前k个单词,可以理解为输出第k个空格(如果存在)之前的所有字符。 考虑一般情况:找到第k个空格,记下此时字符数组下标,然后利用字符串截取函数进行截取即可。 特殊情况:1、就一个单词的字符串。全部截取,count=字符串的长度即可 2、空格数=k-1,直接返回该字符串。

三、AC 代码:

class Solution {
    public String truncateSentence(String s, int k) {
        char[] chars = s.toCharArray();
        int count =0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i]==' ') {
                count++;
            }
            if (count==k) {
                count=i;
                break;
            }
        }
        return count!=0&&count == k-1?s:(s.substring(0,count=count==0?s.length():count));
    }
}

四、总结:

image.png

掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐

希望对你有帮助

期待下次再见~

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注从你我做起!