数组
字符串
题目描述
一个 句子 由一些 单词 以及它们之间的单个空格组成,句子的开头和结尾不会有多余空格。
给你一个字符串数组 sentences
,其中 sentences[i]
表示单个 句子 。
请你返回单个句子里 单词的最多数目 。
示例 1:
输入: sentences = ["alice and bob love leetcode", "i think so too", "this is great thanks very much" ]
输出: 6
解释:
- 第一个句子 "alice and bob love leetcode" 总共有 5 个单词。
- 第二个句子 "i think so too" 总共有 4 个单词。
- 第三个句子 "this is great thanks very much" 总共有 6 个单词。
所以,单个句子中有最多单词数的是第三个句子,总共有 6 个单词。
示例 2:
输入: sentences = ["please wait", "continue to fight" , "continue to win" ]
输出: 3
解释: 可能有多个句子有相同单词数。
这个例子中,第二个句子和第三个句子(加粗斜体)有相同数目的单词数。
提示:
1 <= sentences.length <= 100
1 <= sentences[i].length <= 100
sentences[i]
只包含小写英文字母和 ' '
。
sentences[i]
的开头和结尾都没有空格。
sentences[i]
中所有单词由单个空格隔开。
解法
方法一:空格计数
我们遍历数组 sentences
,对于每个句子,我们计算其中的空格数,那么单词数就是空格数加 $1$。最后返回最大的单词数即可。
时间复杂度 $O(L)$,其中 $L$ 是数组 sentences
中所有字符串的长度之和。空间复杂度 $O(1)$。
Python3 Java C++ Go TypeScript Rust C
class Solution :
def mostWordsFound ( self , sentences : List [ str ]) -> int :
return 1 + max ( s . count ( ' ' ) for s in sentences )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class Solution {
public int mostWordsFound ( String [] sentences ) {
int ans = 0 ;
for ( var s : sentences ) {
int cnt = 1 ;
for ( int i = 0 ; i < s . length (); ++ i ) {
if ( s . charAt ( i ) == ' ' ) {
++ cnt ;
}
}
ans = Math . max ( ans , cnt );
}
return ans ;
}
}
class Solution {
public :
int mostWordsFound ( vector < string >& sentences ) {
int ans = 0 ;
for ( auto & s : sentences ) {
int cnt = 1 + count ( s . begin (), s . end (), ' ' );
ans = max ( ans , cnt );
}
return ans ;
}
};
func mostWordsFound ( sentences [] string ) ( ans int ) {
for _ , s := range sentences {
cnt := 1 + strings . Count ( s , " " )
if ans < cnt {
ans = cnt
}
}
return
}
function mostWordsFound ( sentences : string []) : number {
return sentences . reduce (
( r , s ) =>
Math . max (
r ,
[... s ]. reduce (( r , c ) => r + ( c === ' ' ? 1 : 0 ), 1 ),
),
0 ,
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 impl Solution {
pub fn most_words_found ( sentences : Vec < String > ) -> i32 {
let mut ans = 0 ;
for s in sentences . iter () {
let mut count = 1 ;
for c in s . as_bytes () {
if * c == b' ' {
count += 1 ;
}
}
ans = ans . max ( count );
}
ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #define max(a, b) (((a) > (b)) ? (a) : (b))
int mostWordsFound ( char ** sentences , int sentencesSize ) {
int ans = 0 ;
for ( int i = 0 ; i < sentencesSize ; i ++ ) {
char * s = sentences [ i ];
int count = 1 ;
for ( int j = 0 ; s [ j ]; j ++ ) {
if ( s [ j ] == ' ' ) {
count ++ ;
}
}
ans = max ( ans , count );
}
return ans ;
}
GitHub