难度 简单
句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。
例如,"Hello World"、"HELLO" 和 "hello world hello world" 都是句子。
给你一个句子 s 和一个整数 k ,请你将 s 截断 ,使截断后的句子仅含 前 k 个单词。返回 截断 s 后得到的句子。
提示
句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。
例如,"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"
转载——力扣
算法题不单单是求解,尽量以最优的算法为主(最短的运行时间,最小占用的内存)
解:
class Solution {
public String truncateSentence(String s, int k) {
StringBuffer a=new StringBuffer();
String [] b=s.split(" ");//中间有空格,通过空格拆分
a.append(b[0]);//因为第一个单词前不需要加空格,所以单独拿出来赋值
for (int i=1;i<b.length&&i<k;i++){//满足小于K并且小于单词总个数循环
a.append(" "+b[i]);
}
return a.toString();
}
}
思路很通畅,但是写完之后发现效率太低了,于是开始了 解2.0
解2.0:
class Solution {
public String truncateSentence(String s, int k) {
for(int i=0;i<s.length();i++){
if(s.charAt(i)==' '){
k--;
if(k==0){
return s.substring(0,i);
}
}
}
return s;
}
}
效率大幅度提升