【发布时间】:2021-12-31 23:39:48
【问题描述】:
我来自 java 背景,String 快速切片对我来说显得非常冗长和困难。我正在尝试用一种适用于下标的算法来回答这个 leet 代码问题。
给定一个字符串s,求最长不重复字符的子串的长度。
输入:s = "abcabcbb"
输出:3
解释:答案是“abc”,长度为3。
这是我的代码:
func lengthOfLongestSubstring(_ s: String) -> Int {
var maximum = 0
var start = 0
var end = 0
var set = Set<Character>()
while end < s.count{
if set.contains(s[end]){
set.remove(s[start])
start+=1
}
else{
set.insert(s[end])
end+=1
maximum = max(maximum, end-start)
}
}
}
我使用 Int 下标。但我收到此错误消息:'subscript(_:)' is unavailable: cannot subscript String with an Int, use a String.Index instead。我怎样才能解决它而不会太冗长?
【问题讨论】:
-
如果您简单地说
Array(s)将字符串分解为字符数组,您会更轻松。现在您可以使用 Int 索引了。 -
问题中的代码表明它不仅涉及访问第 n 个字符,还涉及迭代字符串并处理字符串中的位置。因此,我建议重新提出问题
-
@matt 对类似的字符串问题采用这种方法会有帮助吗?
-
我知道你指的是什么。请参阅我之前的评论以获取我的回复。