代码语言:javascript复制
给定一个仅包含大小写字母和空格' '的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。
如果不存在最后一个单词,请返回 0。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
示例:
输入: "Hello World"
输出: 5
代码语言:javascript复制public class LengthofLastWord {
/**
* 不能用split()
* @param s
* @return
*/
public int lengthOfLastWord(String s) {
String[] sArray = s.split(" ");
if (sArray.length > 0) {
return sArray[sArray.length-1].length();
}
return 0;
}
/**
* 初版
* @param s
* @return
*/
public int lengthOfLastWord1(String s) {
int temp = 0;
/** 最初的时候想直接用trim()来去空格,但是想想好像不太好,然后借鉴了题解的高人的代码,通过循环判断尾部是否有空格,有的话长度就减1,直到尾部没有空格为止
* 代码:while (lenth >= 0 && s.charAt(lenth) == ' ') lenth--;
*/
s = s.trim();
// 通过从后往前遍历字符串,定义一个temp来进行计数,temp每次加1,直到遇到空格后返回当前temp值就是单词的长度。
for (int i = s.length() -1; i >= 0; i--) {
if (s.charAt(i) == ' ') {
return temp;
}
temp ;
// 这里有一种单词是单个字符的情况,如“a ”、“a”等,需要单独进行处理,直接返回0即可。
if (i == 0) return temp;
}
return 0;
}
/**
* 修正后
* @param s
* @return
*/
public int lengthOfLastWord2(String s) {
int temp = 0;
int lenth = s.length() -1;
// 去尾部空格
while (lenth >= 0 && s.charAt(lenth) == ' ') lenth--;
// 优化后的代码,最后返回temp就不用在循环里面放i==0的判断了,如果s是空的话也不会走进循环,直接返回0
for (int i = lenth; i >= 0; i--) {
if (s.charAt(i) == ' ') return temp;
temp ;
}
return temp;
}
/**
* 网上大佬写的代码,我发现我对while语句用的还是不熟练,得多学学
* @param s
* @return
*/
public int lengthOfLastWord3(String s) {
int end = s.length() - 1;
while(end >= 0 && s.charAt(end) == ' ') end--;
if(end < 0) return 0;
int start = end;
while(start >= 0 && s.charAt(start) != ' ') start--;
return end - start;
}
public static void main(String[] args) {
LengthofLastWord word = new LengthofLastWord();
// String s = "hello";
String s = "a bbb ";
System.out.println(word.lengthOfLastWord2(s));
}
}
Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/leetcode进阶之路-最后一个单词的长度