题目描述
计算字符串最后一个单词的长度,单词以空格隔开。
输入描述:
一行字符串,非空,长度小于5000。
输出描述:
整数N,最后一个单词的长度。
输入例子:
hello world
输出例子:
5
解法一:正向思维(比较麻烦)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 是否还有其它的行,一次可以测试多行
while (scanner.hasNext()) {
String input = scanner.nextLine();
System.out.println(getLengthOfLastWord(input));
}
scanner.close();
}
public static int getLengthOfLastWord(String str){
if(str==null ||str.length()<=0)
return 0;
char[] strChar=str.toCharArray();
int len=strChar.length;
char flag=1;
char count=0;
//统计空格数,并给空格数做上标记
for(int i=0;i<len;i++){
if(strChar[i]==' '){
strChar[i]=flag++;
count++;
}
}
//如果没有空格就直接返回字符串长度
if(count==0)
return len;
int index=0;
for(int i=0;i<len;i++){
//找到最后一个空格,记下下标index
if(strChar[i]==count){
index=i;
break;
}
}
return len-index-1;
}
}
解法二:逆向思维(推荐)
import java.util.Scanner;
//有空格的时候:h oj:最后一个字母下标3-第一个空格下标1=2(即为最后一个dancichangdu)
//没有空格的时候:hoj:最后一个字母下标2-第一个空格下标0+1(即为单词的长度,因为此时减了0,所以要加1)
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 是否还有其它的行,一次可以测试多行
while (scanner.hasNext()) {
String input = scanner.nextLine();
System.out.println(getLengthOfLastWord(input));
}
scanner.close();
}
public static int getLengthOfLastWord(String str){
if(str==null ||str.length()<=0)
return 0;
int len=str.length();
//记录下最后一个字母的位置
int indexOfLastCharacter=len-1;
while(indexOfLastCharacter>=0 && str.charAt(indexOfLastCharacter)==' '){
indexOfLastCharacter--;
}
//记录下最后一个空格的位置
int indexOfLastBlank=0;
for(int i=len-1;i>=0;i--){
if(str.charAt(i)==' '){
indexOfLastBlank=i;
break;
}
}
if(indexOfLastBlank==0)
return indexOfLastCharacter-indexOfLastBlank+1;
return indexOfLastCharacter-indexOfLastBlank;
}
}