题目描述:编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
来源:力扣(LeetCode) 链接
题解一
解题思路:生成一个新字符串,非空格字符直接拼接到新字符串,空格字符 替换为 “%20” 拼接到新字符串
class Solution {
func replaceSpaces(_ S: String, _ length: Int) -> String {
var result = ""
for (index, c) in S.enumerated() {
if index >= length {
break
}
if c == " " {
result += "%20"
} else {
result += String(c)
}
}
return result
}
}
题解二
解题思路:利用双指针,首先生成一个字符数组,默认将字符串中所有字符放入该数组,然后一个指针指向length - 1,另一个指针指向数组末尾,遇到非空字符直接复制到数组尾部指针当前位置,指针向前移1位,遇到空字符,数组指针位置开始依次修改为0,2,%,指针向前移3位,最后取数组指针位置(不包含该位置数据)后面的数据即可
class Solution {
func replaceSpaces(_ S: String, _ length: Int) -> String {
var array = Array(S)
var index = array.count - 1
for i in (0..<length).reversed() {
let char = array[i]
if char == " " {
array[index] = "0"
array[index - 1] = "2"
array[index - 2] = "%"
index -= 3
} else {
array[index] = char
index -= 1
}
}
return String(array[(index + 1)...])
}
}