美文网首页
LeetCode算法题3--无重复字符的最长子串

LeetCode算法题3--无重复字符的最长子串

作者: 懇_ | 来源:发表于2020-02-27 20:37 被阅读0次

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 则是用来索引数据

相关文章

网友评论

      本文标题:LeetCode算法题3--无重复字符的最长子串

      本文链接:https://www.haomeiwen.com/subject/rloxhhtx.html