1. 题目(36)句子中的最多单词数
题目链接:句子中的最多单词数
一个 句子 由一些 单词 以及它们之间的单个空格组成,句子的开头和结尾不会有多余空格。
给你一个字符串数组 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] 中所有单词由单个空格隔开。
2. 解题思路
找规律,仔细阅读题目可知“单词数=空格数+1”
遍历整个字符串,通过空格数算出单词数,将该值与max值作比较,让max保持最大
最后返回max即可
3. 代码
int mostWordsFound(char** sentences, int sentencesSize) {
int max = 0;
int i=0,j=0;
for(i=0;i<sentencesSize;i++)
{
int tmp = 0;//临时统计一个句子中的单词数
for(j=0;sentences[i][j];j++)
{
if(sentences[i][j]==' ')
tmp++;
}
tmp++;//空格数+1=单词数
//比较谁大
if(tmp > max)
max = tmp;
}
return max;
}
4. 题目(37)反转两次的数字
题目链接:反转两次的数字
反转 一个整数意味着倒置它的所有位。
例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。
给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false 。
-
示例 1:
输入:num = 526
输出:true
解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。 -
示例 2:
输入:num = 1800
输出:false
解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。 -
示例 3:
输入:num = 0
输出:true
解释:反转 num 得到 0 ,接着反转 0 得到 0 ,等于 num 。
提示:
0 <= num <= 106
5. 解题思路
5.1 法一
这题很简单,我们之前做过类似的:求数字的每一位之和
只需要在拿原来数字的第一位时,让你的sum*10就OK了~
5.2 法二
找规律,仔细观察题目,当num的个位为0且这个数不等于0时,num反转后一定不等于原数。
基于以上规律来写代码。
6. 代码
6.1 法一
int reverse(int x)
{
int tmp = 0;
while(x)
{
tmp = tmp*10 + x%10;
x/=10;
}
return tmp;
}
bool isSameAfterReversals(int num) {
return num==reverse(reverse(num));
}
6.2 法二
bool isSameAfterReversals(int num) {
return num%10!=0 || num == 0;
}