HJ1 字符串最后一个单词的长度

3,052 阅读2分钟

题目描述

计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)

输入描述:

输入一行,代表要计算的字符串,非空,长度小于5000。

输出描述:

输出一个整数,表示输入字符串最后一个单词的长度。

示例1

输入:

hello dayday

输出:

8

说明:

最后一个单词为dayday,长度为6   

思路

思路一:将整个字符串的输入接收并存到一个string类型变量str中,从后往前进行遍历,每次进行一次遍历使计数count(初值为零)增一,当检测到空格时跳出循环(本次循环count不增)。难点在于普通的cin检测到空格时视为结束输入,需要更换读取输入方式。

思路二:在循环里一个一个字符读取,检测到空格时计数清零,非空格也非换行符时计数增一,检测到换行符时跳出循环并输出计数。

思路三:一个很巧妙的解法,来自于牛客题解,但是有些投机取巧。将cin写在while循环里,由于cin读到空格时会结束输入,所以第二个单词的输入会覆盖第一个单词,从而最后输出的是最后一个单词的长度。

思路四:使用Java系统函数split。

具体实现

思路一

C++

int main() {
    string s;
    int count = 0;
    getline(cin,s);
    for(int i=s.size()-1;i>=0;i--){
        if(s[i]==' ') break;
        count++;
    }
    cout<<count;
    return 0;
}

Java

  public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      String str = sc.nextLine();
      int length = str.length();
      int count = 0;
      for (int i = length - 1; i >= 0; i--) {
          if (str.charAt(i)==' ') { // 或者 if (str.substring(i, i + 1).equals(" ")) {
              break;
          }
          count++;
      }
      System.out.println(count);
  }

思路二

C++

int main() {
    char a;
    int count = 0;
    do {
        a = getchar();
        if (a == ' ') {
            count = 0;
        } else if (a != '\n') {
            count++;
        } else break;
    } while (a != '\n');
    cout << count;
    return 0;
}

思路三

C++

int main() {
    string s;
    while(cin>>s);
    cout<<s.size();
    return 0;
}

思路四

Java

  public static void main(String[] args){
      Scanner sc = new Scanner(System.in);
      String str = sc.nextLine();
      String[] s = str.split(" "); 
      int length = s[s.length - 1].length();
      System.out.println(length);
  }

时间复杂度

均为O(n)。

小结

对Java的相关函数的熟练度还不够,这次的Java代码基本都是参考别人写的,打算补一下Java基础,以后尽量用Java解题。