mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
@ -467,6 +467,85 @@ function reverse(strArr, start, end) {
|
||||
}
|
||||
```
|
||||
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func reverseWords(_ s: String) -> String {
|
||||
var stringArr = removeSpace(s)
|
||||
reverseString(&stringArr, startIndex: 0, endIndex: stringArr.count - 1)
|
||||
reverseWord(&stringArr)
|
||||
return String(stringArr)
|
||||
}
|
||||
|
||||
/// 1、移除多余的空格(前后所有的空格,中间只留一个空格)
|
||||
func removeSpace(_ s: String) -> [Character] {
|
||||
let ch = Array(s)
|
||||
var left = 0
|
||||
var right = ch.count - 1
|
||||
// 忽略字符串前面的所有空格
|
||||
while ch[left] == " " {
|
||||
left += 1
|
||||
}
|
||||
// 忽略字符串后面的所有空格
|
||||
while ch[right] == " " {
|
||||
right -= 1
|
||||
}
|
||||
|
||||
// 接下来就是要处理中间的多余空格
|
||||
var lastArr = Array<Character>()
|
||||
while left <= right {
|
||||
// 准备加到新字符串当中的字符
|
||||
let char = ch[left]
|
||||
// 新的字符串的最后一个字符;或者原字符串中,准备加到新字符串的那个字符;这两个字符当中,只要有一个不是空格,就可以加到新的字符串当中
|
||||
if char != " " || lastArr[lastArr.count - 1] != " " {
|
||||
lastArr.append(char)
|
||||
}
|
||||
|
||||
left += 1
|
||||
}
|
||||
return lastArr
|
||||
}
|
||||
|
||||
/// 2、反转整个字符串
|
||||
func reverseString(_ s: inout [Character], startIndex: Int, endIndex: Int) {
|
||||
var start = startIndex
|
||||
var end = endIndex
|
||||
while start < end {
|
||||
(s[start], s[end]) = (s[end], s[start])
|
||||
start += 1
|
||||
end -= 1
|
||||
}
|
||||
}
|
||||
|
||||
/// 3、再次将字符串里面的单词反转
|
||||
func reverseWord(_ s: inout [Character]) {
|
||||
var start = 0
|
||||
var end = 0
|
||||
var entry = false
|
||||
|
||||
for i in 0..<s.count {
|
||||
if !entry {
|
||||
start = i
|
||||
entry = true
|
||||
}
|
||||
|
||||
if entry && s[i] == " " && s[i - 1] != " " {
|
||||
end = i - 1
|
||||
entry = false
|
||||
reverseString(&s, startIndex: start, endIndex: end)
|
||||
}
|
||||
|
||||
if entry && (i == s.count - 1) && s[i] != " " {
|
||||
end = i
|
||||
entry = false
|
||||
reverseString(&s, startIndex: start, endIndex: end)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -214,6 +214,34 @@ var reverseLeftWords = function (s, n) {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
|
||||
```swift
|
||||
func reverseLeftWords(_ s: String, _ n: Int) -> String {
|
||||
var ch = Array(s)
|
||||
let len = ch.count
|
||||
// 反转区间[0, n - 1]
|
||||
reverseString(&ch, startIndex: 0, endIndex: n - 1)
|
||||
// 反转区间[n, len - 1]
|
||||
reverseString(&ch, startIndex: n, endIndex: len - 1)
|
||||
// 反转区间[0, len - 1],也就是整个字符串反转
|
||||
reverseString(&ch, startIndex: 0, endIndex: len - 1)
|
||||
return String(ch)
|
||||
}
|
||||
|
||||
func reverseString(_ s: inout [Character], startIndex: Int, endIndex: Int) {
|
||||
var start = startIndex
|
||||
var end = endIndex
|
||||
while start < end {
|
||||
(s[start], s[end]) = (s[end], s[start])
|
||||
start += 1
|
||||
end -= 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user