一句话中的反向词 - 斯威夫特

时间:2018-04-03 12:50:31

标签: ios swift string

如何对句子中的所有单词进行反转。

示例

let str = "Hello playground"

结果应该像"olleH dnuorgyalp"

复杂性最低。

5 个答案:

答案 0 :(得分:2)

您可以使用String方法enumerateSubstrings使用.byWords选项,并将子字符串替换为每个字的子范围。请注意,这样标点符号将保持不变:

var str = "Hello, playground!!!"

str.enumerateSubstrings(in: str.startIndex..., options: .byWords) { _, range, _, _ in
    str.replaceSubrange(range, with: str[range].reversed())
}
print(str)  // "olleH, dnuorgyalp!!!"

答案 1 :(得分:2)

这是典型的函数式编程方法(也由 @Saranjith 发布)

let result = str
    .components(separatedBy: " ")
    .map { $0.reversed() }
    .joined()

复杂性

首先让我们定义

  • n:输入字符串中的字符数
  • k:输入字符串中的字数(当然k <= n)

⏳时间复杂度

现在让我们看看每段代码的时间复杂度

  

.components(separatedBy:“”)

此说明需要遍历整个字符串O(n)

  

.map {$ 0.reversed()}

这里每个单词都是相反的。因此,如果我们有k个单词,那么我们的时间复杂度为

O(m0) + O(m1) + ... + O(mk-1)

其中mii-th字的长度。 然而,所有单词的长度总和是&lt; = n所以我们可以说

O(m0) + O(m1) + ... + O(mk-1) <= O(n)
  

<强> .joined()

最后我们有k个词需要加入到关键词中。这可以在O(k)中完成,同样是<= O(n)

总结

let result = str
    .components(separatedBy: " ") // O(n)
    .map { $0.reversed() } // O(m0) + O(m1) + ... + O(mk-1) <= O(n)
    .joined() // O(k) <= O(n)

时间复杂度= O(n)+ O(n)+ O(n)= O(n)

空间复杂性

  

.components(separatedBy:“”)

我们正在构建k Strings (m0, m1, ..., mk-1)。这些k-1字词的长度总和为<= n,因此空间复杂度为O(n)

  

.map {$ 0.reversed()}

对于每个(m0,m1,...,mk-1),我们正在构建一个副本。所以,再次O(n)

  

<强> .joined()

这里我们构建的结果是一个包含n个字符的字符串。因此空间复杂度为O(n)。

空间复杂度:O(n)+ O(n)+ O(n)= O(n)。

答案 2 :(得分:1)

工作代码!

 import UIKit

 var str = "Hello playground"

 let result = str.split(separator: " ").map { String($0.reversed())}.joined(separator: " ")
 print(result) // olleH dnuorgyalp

答案 3 :(得分:1)

根据OP的答案,如果你想在输出上遵循英语大小写规则:

var str = "Hello playground"

let result = str.split(separator: " ").enumerated().map {
    let reversed = String($0.1.reversed())
    return $0.0 == 0 ? reversed.capitalized : reversed.lowercased()
    }
    .joined(separator: " ")
print("Rerversing letters in each word = \"" + result + "\"") // Olleh dnuorgyalp

另请注意,多个空格会混淆这一点,就像逗号,句号和其他单词/句子分隔符一样。

答案 4 :(得分:0)

url