434. 字符串中的单词数

解法一、分割再正则表达式
不用猜就知道时间复杂度很高,主要是想写正则了
\S是非空白 .*是前后匹配任意字符
class Solution {
public static int countSegments(String s) {
if(s.length() < 1)return 0;
int sum = 0;
String [] temp = s.split(" ");
for(int i = 0;i < temp.length;i++){
if(temp[i].matches(".*\\S.*")){
sum++;
}
}
return sum;
}
}
解法二、原地法
其实和之前那道战舰题有异曲同工之妙?只要考虑每个segment的开头一个字母就好。简化思路,省略判断,减少码量,增加可读性。
class Solution {
public int countSegments(String s) {
int segmentCount = 0;
for (int i = 0; i < s.length(); i++) {
if ((i == 0 || s.charAt(i - 1) == ' ') && s.charAt(i) != ' ') {
segmentCount++;
}
}
return segmentCount;
}
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/number-of-segments-in-a-string/solutions/1033996/zi-fu-chuan-zhong-de-dan-ci-shu-by-leetc-igfb/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
58. 最后一个单词的长度
解法一、从后遍历
从后往前。一旦遇到第一个是字母的,就用while抓住它为基点进行遍历。
力扣是真喜欢出空的数据啊。。记得讨论边界情况
class Solution {
public static int lengthOfLastWord(String s) {
int len = s.length();
if(len == 0)return 0;
int res = 0;
for(int i = len - 1;i >= 0;i--){
if(Character.isLetter(s.charAt(i))){
while (i >= 0&&Character.isLetter(s.charAt(i))){
i--;
res++;
}
return res;
}
}
return res;
}
}
解法二、正则表达式
正门!(原来表达式是一种语法而不是一种函数,虽然早就知道,但放在split里才有意识
// 使用正则表达式匹配所有单词
String[] words = s.split("\\s+");
// 返回最后一个单词的长度
if (words.length == 0) {
return 0;
}
return words[words.length - 1].length();
解法三、API战士
class Solution {
public int lengthOfLastWord(String s) {
s = s.trim();
return s.length() - s.lastIndexOf(" ") - 1;
}
}
碎碎念
s.lastIndexOf(" ")
返回字符串s
中最后一个空格字符的位置。s.trim()
方法去除字符串s
两端的所有空白字符(包括空格、制表符等)。- 字符串相关基础题真是有认识的api就会很爽(还是要抓紧基础吧,不过目前感觉还是数组遍历问题···
- 正门!
- ↓你会背吗存了就是背了反正我不背