LeetCode58最後の単語の長さ
タイトル説明
大文字と小文字とスペースのみを含む文字列sが与えられた場合、その最後の単語の長さを返します。文字列が左から右にスクロールする場合、最後の単語が表示される最後の単語です。
最後の単語がない場合は、0を返します。
注:単語とは、文字のみで構成され、スペース文字を含まない最大のサブストリングを指します。
例
入力:「ハローワールド」
出力:5
問題分析
タイトルの意味によると、とにかく、最後の文字の単語の長さを見つけることです(もちろん、スペルが正しいことは私たちの責任ではありません)。次に、後ろから前へのトラバースを開始し、文字数を数え、スペースに遭遇したときに統計的な長さを返します。ただし、タイトルで指定された文字列の末尾に複数のスペースが含まれる場合があります(例: "hello world")。最初と最後のスペースを削除するだけです。削除するには2つの方法があります。
- java文字列のtrimメソッドを使用して、先頭と末尾のスペースを削除します
- 表示および削除する必要はなく、カウント時に最後のスペースを直接スキップし、スペースではない最初の文字が検出されたときにカウントを開始します。
これを実現する2つの方法があります。
-
java、C ++、pythonなどの言語の場合、文字列のスライス操作、つまり分割があります。以下は、split関数を直接使用して、入力文字列をスペースに従って文字列の配列に分割し、配列の最後の文字列の長さを返す方法です。
public int lengthOfLastWord(String s) { String[] split = s.split(" "); if (split.length == 0) { //s都是空格的话切分之后的数组为空 return 0; } return split[split.length - 1].length(); }
プログラム実行結果:
-
上記のsplitの使用方法は単純明快ですが、それほど速くはありません。後ろから前に直接カウントする方法の方がはるかに高速です。コードは次のとおりです。
public int lengthOfLastWord(String s) { int count = 0; //s = s.trim(); //提前将首尾的空格去除掉 for (int i = s.length() - 1; i >= 0; i--) { if (s.charAt(i) == ' ' && count == 0) { //直接跳过末尾的空格,没有用trim方法的话可以这么实现 continue; } if (s.charAt(i) == ' ') { //跳过最末尾的所有空格后如果之后还出现空格则证明最后一个单词的长度已经统计完毕 break; } count++; } return count; }