当前位置: 首页 > 科技观察

一篇关于最长不重复子串的文章

时间:2023-03-11 21:42:33 科技观察

前言从本期开始,我们社区将发布谷一(Netflix增长黑客,作者《iOS 面试之道》,ACE专业健身教练。])的Swift算法解决方案整理成文字版供大家参考方便大家的学习和阅读。该算法的解法github仓库地址为:https://github.com/soapyigu/LeetCode-Swift[2]不积步难行千里;1.描述给定一个字符串s,找出最长的不重复子串的长度。2.示例示例1输入:s="abcabcbb"输出:3解释:最长不重复子串答案是"abc",长度为3。示例2输入:s="bbbbb"输出:1解释:最长不重复子串答案是长度为1的"b"示例3输入:s="pwwkew"输出:1解释:最长的不重复子串答案是长度为3的"wke"。注意答案必须是子串,"pwke"是一个子列,不是子串。示例4输入:s=""输出:03.AnswerclassLongestSubstringWithoutRepeatingCharacters{funclengthOfLongestSubstring(_s:String)->Int{varmaxLen=0,startIdx=0,charToPos=[Character:Int]()letChars=Array(s)for(i,char)insChars.enumerated(){ifletpos=charToPos[char]{startIdx=max(startIdx,pos)}//updatetonextvalidpositioncharToPos[char]=i+1maxLen=max(maxLen,i-startIdx+1)}returnmaxLen}}主要思想:使用字典存储非重复子串下一个可能有效字符的位置,然后在遇到重复时迭代字符串更新maxLen、dictionary和startIdx。时间复杂度:O(n)空间复杂度:O(n)