Situation:我正在解決 LeetCode 3. Longest Substring Without Repeating Characters,當我使用Dictionaryusing Swift 時,結果是Time Limit Exceeded最后一個測驗用例失敗,但是使用與 C 相同的代碼概念,它實際上通過運行時就可以了。我認為 swiftDictionary與UnorderdMap.
Some research:我發現一些資源說NSDictionary比常規資源使用,但它需要參考型別而不是 Int 或 Character 等。
Expected result:Dictionary在 Swift中訪問的快速性能
Question:我知道這個問題有更好的答案,但這里的主要目標是Is there a effiencient to access and write to Dictionary或者我們可以用來替代的東西。
func lengthOfLongestSubstring(_ s: String) -> Int {
var window:[Character:Int] = [:] //swift dictionary is kind of slow?
let array = Array(s)
var res = 0
var left = 0, right = 0
while right < s.count {
let rightChar = array[right]
right = 1
window[rightChar, default: 0] = 1
while window[rightChar]! > 1 {
let leftChar = array[left]
window[leftChar, default: 0] -= 1
left = 1
}
res = max(res, right - left)
}
return res
}
uj5u.com熱心網友回復:
因為String中count的復雜度是O(n),所以你應該把count保存在一個變數中。您可以閱讀 Swift Book 中的字串和字符一章
擴展字素簇可以由多個 Unicode 標量組成。這意味著不同的字符——以及同一字符的不同表示——可能需要不同數量的記憶體來存盤。正因為如此,Swift 中的字符不會在字串表示中占用相同數量的記憶體。因此,如果不遍歷字串以確定其擴展字素簇邊界,就無法計算字串中的字符數。如果您使用特別長的字串值,請注意 count 屬性必須遍歷整個字串中的 Unicode 標量,以確定該字串的字符。
count 屬性回傳的字符數并不總是與包含相同字符的 NSString 的 length 屬性相同。NSString 的長度基于字串的 UTF-16 表示中的 16 位代碼單元的數量,而不是字串中的 Unicode 擴展字形簇的數量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/521670.html
標籤:迅速字典哈希图
