美文网首页算法
IOS 算法(基础篇) ----- 将句子排序

IOS 算法(基础篇) ----- 将句子排序

作者: ShawnAlex | 来源:发表于2021-05-17 10:32 被阅读0次

    一个 句子 指的是一个序列的单词用单个空格连接起来,且开头和结尾没有任何空格。每个单词都只包含小写或大写英文字母。
    我们可以给一个句子添加 从 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 算法合集地址

    相关文章

      网友评论

        本文标题:IOS 算法(基础篇) ----- 将句子排序

        本文链接:https://www.haomeiwen.com/subject/rhtjjltx.html