50
50
51
51
<!-- 这里可写通用的实现逻辑 -->
52
52
53
+ ** 方法一:逆向遍历 + 双指针**
54
+
55
+ 从字符串 $s$ 末尾开始遍历,找到第一个不为空格的字符,即为最后一个单词的最后一个字符,下标记为 $i$。然后继续向前遍历,找到第一个为空格的字符,即为最后一个单词的第一个字符的前一个字符,记为 $j$。那么最后一个单词的长度即为 $i - j$。
56
+
57
+ 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为字符串 $s$ 长度。
58
+
53
59
<!-- tabs:start -->
54
60
55
61
### ** Python3**
59
65
``` python
60
66
class Solution :
61
67
def lengthOfLastWord (self , s : str ) -> int :
62
- last_word_length = 0
63
- meet_word = False
64
- for i in range (len (s) - 1 , - 1 , - 1 ):
65
- ch = ord (s[i])
66
- if ch >= 65 and ch <= 122 :
67
- meet_word = True
68
- last_word_length += 1
69
- elif meet_word:
70
- break
71
- return last_word_length
68
+ i = len (s) - 1
69
+ while i >= 0 and s[i] == ' ' :
70
+ i -= 1
71
+ j = i
72
+ while j >= 0 and s[j] != ' ' :
73
+ j -= 1
74
+ return i - j
72
75
```
73
76
74
77
### ** Java**
@@ -78,64 +81,67 @@ class Solution:
78
81
``` java
79
82
class Solution {
80
83
public int lengthOfLastWord (String s ) {
81
- int n = s. length();
82
- int lastWordLength = 0 ;
83
- boolean meetWord = false ;
84
- for (int i = n - 1 ; i >= 0 ; -- i) {
85
- char ch = s. charAt(i);
86
- if (ch >= ' A' && ch <= ' z' ) {
87
- meetWord = true ;
88
- ++ lastWordLength;
89
- } else if (meetWord) {
90
- break ;
91
- }
84
+ int i = s. length() - 1 ;
85
+ while (i >= 0 && s. charAt(i) == ' ' ) {
86
+ -- i;
92
87
}
93
- return lastWordLength;
88
+ int j = i;
89
+ while (j >= 0 && s. charAt(j) != ' ' ) {
90
+ -- j;
91
+ }
92
+ return i - j;
94
93
}
95
94
}
96
95
```
97
96
97
+ ### ** C++**
98
+
99
+ ``` cpp
100
+ class Solution {
101
+ public:
102
+ int lengthOfLastWord(string s) {
103
+ int i = s.length() - 1;
104
+ while (i >= 0 && s[ i] == ' ') --i;
105
+ int j = i;
106
+ while (j >= 0 && s[ j] != ' ') --j;
107
+ return i - j;
108
+ }
109
+ };
110
+ ```
111
+
98
112
### **Go**
99
113
100
114
```go
101
115
func lengthOfLastWord(s string) int {
102
- if len (s) == 0 {
103
- return 0
104
- }
105
- space := []byte (" " )[0 ]
106
- for len (s) != 0 && s[len (s)-1 ] == space {
107
- s = s[:len (s)-1 ]
116
+ i := len(s) - 1
117
+ for i >= 0 && s[i] == ' ' {
118
+ i--
108
119
}
109
- ret := 0
110
- for i := len (s) - 1 ; i >= 0 ; i-- {
111
- if s[i] != space {
112
- ret++
113
- } else {
114
- return ret
115
- }
120
+ j := i
121
+ for j >= 0 && s[j] != ' ' {
122
+ j--
116
123
}
117
- return ret
124
+ return i - j
118
125
}
119
126
```
120
127
121
128
### ** JavaScript**
122
129
123
130
``` js
131
+ /**
132
+ * @param {string} s
133
+ * @return {number}
134
+ */
124
135
var lengthOfLastWord = function (s ) {
125
- s = s .trim ();
126
- return s .length - s .lastIndexOf (' ' ) - 1 ;
127
- };
128
-
129
- var lengthOfLastWord2 = function (s ) {
130
- let res = 0 ;
131
- for (let i = 0 ; i < s .length ; i++ ) {
132
- if (s[i] !== ' ' && (i === 0 || s[i - 1 ] === ' ' )) {
133
- res = 1 ;
134
- } else if (s[i] !== ' ' ) {
135
- res++ ;
136
- }
136
+ let i = s .length - 1 ;
137
+ while (i >= 0 && s[i] === ' ' ) {
138
+ -- i;
139
+ }
140
+ let j = i;
141
+ while (j >= 0 && s[j] !== ' ' ) {
142
+ -- j;
137
143
}
138
- return res ;
144
+ return i - j ;
139
145
};
140
146
```
141
147
0 commit comments