トピック
大文字と小文字およびスペースのみを含む文字列sが与えられた場合、最後の単語の長さを返します。文字列が左から右にスクロールする場合、最後の単語が最後に表示される単語です。
最後の単語がない場合は、0を返します。
注:単語とは、文字のみで構成され、スペース文字を含まない最大の部分文字列を指します。
回答
この質問では、ヌル文字を含まない最後の連続した文字列を見つける方法を検討します。どうやってそのような言葉を見つけますか?実際、検索する文字列の最初と最後を見つけるだけで済みます。文字列で見つけることなので、トラバースすることは避けられません。最初に最初からトラバースすることを検討してください。最後の単語の始まりを判別するのは簡単ではないことがわかりました。単語にトラバースするときに、その背後にある文字がわからない場合、それが最後の単語であるかどうかはわかりません。次に、後ろから前に移動することを検討し、最後の単語を判別する方が簡単であることがわかります。後ろから前に移動するときに最初に検出される空白以外の文字は、最後の単語の終わりです。トラバースを続け、最初のヌル文字に遭遇したときに単語の先頭を見つけます。
また、文字列の長さが0の場合と、文字列全体に単語がない場合を考えてみます。
コード
class Solution {
public int lengthOfLastWord(String s) {
if(s.length() == 0) {
return 0;
}
int end = s.length() - 1;
while(end >= 0 && s.charAt(end) == ' ') {
end--;
}
int start = end;
while(start >= 0 && s.charAt(start) != ' ') {
start--;
}
return end - start;
}
}