Kotlin答案:
fun lengthOfLongestSubstring(s: String): Int {
var sameStrIndex : Int = 0 //记录最近的相同字符串位置
val list = s.split("")
var stringMax : Int = 0 //记录最大无重复字符的子串
val stringMap : HashMap<String,Int> = HashMap()
for(i in list.indices){
if(i == 0 || i == list.size-1){continue}
if(stringMap.containsKey(list[i])){ //判断HashMap中是否有相同的字符串
if (stringMap[list[i]]!! >= sameStrIndex){ //判断字符是否在最近相同字符的前后 如果在后面就不用管他了
sameStrIndex = stringMap[list[i]]!!
stringMap.remove(list[i])
}
if (i - sameStrIndex >= stringMax){ //当前位置 - 最近相同字符串位置 = 无重复字符串长度
stringMax = i - sameStrIndex
}
stringMap[list[i]] = i
continue
}
stringMap[list[i]] = i
if (i - sameStrIndex >= stringMax){
stringMax = i - sameStrIndex
}
}
return stringMax
}
非最优解 思路看注释
把字符串分割成List,其中前后会分割出多余的两个,例如( abbc -> [, a, b, b, a, ] )
stringMap 则是用来索引数据
网友评论