gpt4 book ai didi

swift - 我如何优化这段操作字符串的代码?

转载 作者:行者123 更新时间:2023-11-28 10:58:01 25 4
gpt4 key购买 nike

我正在尝试为这个 Hackerrank 问题提出一个更快的解决方案:https://www.hackerrank.com/challenges/30-review-loop

简而言之,我必须将每个输入字符串分成两个字符串,第一个具有原始字符串的偶数索引字符,第二个具有奇数索引。要分离的字符串数保存到numStrings 常量中,字符串本身保存在inputString 中。

import Foundation

let numStrings = Int(readLine()!)!

func printEvenAndOdd(string: String) {
var firstString = ""
var secondString = ""
var stringIndex = string.index(string.startIndex, offsetBy: 0)

for index in 0..<string.characters.count {
stringIndex = string.index(string.startIndex, offsetBy: index)

if index % 2 == 0 {
firstString += String(string[stringIndex])
} else {
secondString += String(string[stringIndex])
}
}
print(firstString + " " + secondString)
}

for _ in 1...numStrings {
let inputString = readLine()!
printEvenAndOdd(string: inputString)
}

我的代码可以工作,但由于超时而未能通过最后 3 次测试。我可以使算法更快吗?

最佳答案

func index(_ i: String.Index, offsetBy n: String.IndexDistance) -> String.Index

是 O(n),这意味着它随着 n 的增加而变慢。因此,您的字符串越长,您的算法运行的速度就越慢。

要在 O(1) 时间内访问字符,您应该只使用 for char in string.characters 来获取字符。

如果您使用 string.characters.enumerated(),您将获得一个包含字符索引和字符本身的元组序列。然后你的代码变成:

func printEvenAndOdd(string: String) {
var firstString = ""
var secondString = ""

for (index, char) in string.characters.enumerated() {
if index % 2 == 0 {
firstString += String(char)
} else {
secondString += String(char)
}
}
print(firstString + " " + secondString)
}

关于swift - 我如何优化这段操作字符串的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42101058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com