最后一个单词的长度
来源:力扣(LeetCode) 链接:leetcode.cn/problems/le…
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为5。
示例 2:
输入:s = " fly me to the moon "
输出:4
解释:最后一个单词是“moon”,长度为4。
示例 3:
输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为6的“joyboy”。
提示:
- 1 <= s.length <= 104
- s 仅有英文字母和空格 ' ' 组成
- s 中至少存在一个单词
代码
class Solution {
public int lengthOfLastWord(String s) {
s = s.trim(); // 去除字符串首尾的空格
int length = 0;
for (int i = s.length() - 1; i >= 0; i--) {
if (s.charAt(i) == ' ') {
break; // 遇到空格就结束循环
}
length++;
}
return length;
}
}
思路分析
- 使用
trim()函数去除字符串s首尾的空格,得到一个新的字符串。 - 初始化一个变量
length为0,用于记录最后一个单词的长度。 - 从字符串的末尾开始遍历,使用一个循环,从索引
s.length() - 1到0。 - 在循环中,判断当前字符是否为空格。如果是空格,则跳出循环,因为已经找到最后一个单词的末尾。
- 如果不是空格,将
length加1。 - 最终返回
length,即最后一个单词的长度。
有效数字
来源:力扣(LeetCode) 链接:leetcode.cn/problems/va…
有效数字(按顺序)可以分成以下几个部分:
- 一个 小数 或者 整数
- (可选)一个 'e' 或 'E' ,后面跟着一个 整数
小数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符('+' 或 '-')
- 下述格式之一:
- 至少一位数字,后面跟着一个点 '.'
- 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
- 一个点 '.' ,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符('+' 或 '-')
- 至少一位数字
部分有效数字列举如下:["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
部分无效数字列举如下:["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。
示例 1:
输入:s = "0"
输出:true
示例 2:
输入:s = "e"
输出:false
示例 3:
输入:s = "."
输出:false
提示:
- 1 <= s.length <= 20
- s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,或者点 '.' 。
代码
class Solution {
public boolean isNumber(String s) {
s = s.trim();
boolean isNumber = false;
boolean hasE = false;
boolean hasDot = false;
boolean hasDigit = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
isNumber = true;
hasDigit = true;
} else if (c == '+' || c == '-') {
if (i > 0 && s.charAt(i - 1) != 'e' && s.charAt(i - 1) != 'E') {
return false;
}
} else if (c == 'e' || c == 'E') {
if (hasE || !hasDigit) {
return false;
}
hasE = true;
isNumber = false;
hasDigit = false;
} else if (c == '.') {
if (hasDot || hasE) {
return false;
}
hasDot = true;
} else {
return false;
}
}
return isNumber && hasDigit;
}
}
思路分析
- 使用
trim()函数去除字符串s首尾的空格,得到一个新的字符串。 - 初始化一些布尔变量:
isNumber表示是否为数字,hasE表示是否包含'e'或'E',hasDot表示是否包含小数点,hasDigit表示是否包含数字。 - 使用一个循环遍历字符串
s的每个字符。 - 如果当前字符是数字,将
isNumber设置为true,并将hasDigit设置为true。 - 如果当前字符是'+'或'-',则需判断它们的位置是否合法。如果该符号不是出现在字符串的开头或紧接在'e'或'E'之后,则返回false。
- 如果当前字符是'e'或'E',则需判断它的位置是否合法。如果已经出现过'e'或'E',或者当前还没有出现过数字,则返回false。将
hasE设置为true,并重置isNumber和hasDigit为false,因为'e'或'E'后面必须跟着一个数字。 - 如果当前字符是小数点'.',则需判断它的位置是否合法。如果已经出现过小数点或'e'或'E',则返回false。将
hasDot设置为true。 - 如果当前字符不是合法的数字字符,直接返回false。
- 循环结束后,判断最终的结果:
isNumber必须为true,且至少要有一个数字出现。 - 返回最终的结果。