给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大
子字符串
#include <iostream>
#include <string>int lengthOfLastWord(std::string s) {int len = 0;int i = s.length() - 1;// 从字符串末尾开始遍历,跳过末尾的空格字符while (i >= 0 && s[i] == ' ') {i--;}// 统计最后一个单词的长度while (i >= 0 && s[i] != ' ') {len++;i--;}return len;
}int main() {std::string s = "Hello World";int result = lengthOfLastWord(s);std::cout << "Length of last word: " << result << std::endl;return 0;
}
从字符串的末尾开始遍历。首先跳过末尾的空格字符。然后统计最后一个单词的长度,直到遇到空格字符或字符串的起始位置。
时间复杂度分析:
该函数包含两个循环,第一个循环用于跳过末尾的空格字符,第二个循环用于统计最后一个单词的长度。
第一个循环的时间复杂度为 O(n),其中 n 是字符串的长度。
第二个循环的时间复杂度同样为 O(n),因为在最坏情况下,需要遍历整个字符串来统计最后一个单词的长度。
因此,总的时间复杂度为 O(n)。
空间复杂度分析:
该函数只使用了常量级别的额外空间,即两个整型变量 len 和 i,因此空间复杂度为 O(1)。
综上所述,该函数的时间复杂度为 O(n),空间复杂度为 O(1)。