一个 句子 指的是一个序列的单词用单个空格连接起来,且开头和结尾没有任何空格。每个单词都只包含小写或大写英文字母。
我们可以给一个句子添加 从 1 开始的单词位置索引 ,并且将句子中所有单词 打乱顺序 。
比方说,句子 "This is a sentence" 可以被打乱顺序得到 "sentence4 a3 is2 This1" 或者 "is2 sentence4 This1 a3" 。
给你一个 打乱顺序 的句子 s ,它包含的单词不超过 9 个,请你重新构造并得到原本顺序的句子。
2 <= s.length <= 200
s 只包含小写和大写英文字母、空格以及从 1 到 9 的数字。
s 中单词数目为 1 到 9 个。
s 中的单词由单个空格分隔。
s 不包含任何前导或者后缀空格。
例子
输入:s = "is2 sentence4 This1 a3"
输出:"This is a sentence"
解释:将 s 中的单词按照初始位置排序,得到 "This1 is2 a3 sentence4" ,然后删除数字。
示例 2:
输入:s = "Myself2 Me1 I4 and3"
输出:"Me Myself and I"
解释:将 s 中的单词按照初始位置排序,得到 "Me1 Myself2 and3 I4" ,然后删除数字。
解题思路
题意不难理解, 排列顺序已给, 按照顺序排序
建议一个空数组, 按位置编号对号入座插入字符串
循环数组把每项拼接, 形成新字符串
代码
未翻译版
func sortSentence(_ s: String) -> String {
let sArr = s.split(separator: " "), num = "123456789"
var resArr = Array(repeating: "", count: sArr.count), res = ""
for var i in sArr {
var temp = ""
while num.contains(i.last!) {
temp = String(i.last!) + temp
i.removeLast()
}
resArr[Int(temp)! - 1] = String(i)
}
for i in 0..<resArr.count {
res = i == 0 ? resArr[i] : res + " " + resArr[i]
}
return res
}
翻译版
func sortSentence(_ s: String) -> String {
// 将字符串转换成数组sArr
let sArr = s.split(separator: " "), num = "123456789"
// 定义空数组resArr. 每项为空字符串, 个数与s个数相同; 结果res
var resArr = Array(repeating: "", count: sArr.count), res = ""
// 遍历数组sArr
for var i in sArr {
// 获取到对应字符串位置
var temp = ""
// 我这块是从后往前遍历, 依次删除末尾数字字符串, 遇到不为数字则跳出循环
while num.contains(i.last!) {
temp = String(i.last!) + temp
i.removeLast()
}
// 新数组对应位置放入字符串
resArr[Int(temp)! - 1] = String(i)
}
// 遍历数组resArr, 拼接成新字符串
for i in 0..<resArr.count {
res = i == 0 ? resArr[i] : res + " " + resArr[i]
}
// 返回结果
return res
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址
网友评论