您的位置:首页 > 其它

LeetCode 第三题,官方给的标准答案的一个分析,利用空间换时间,将复杂度降到了O(n)

2017-06-01 18:12 323 查看
int lengthOfLongestSubstring(string s) {  

  int n = s.length();  

  int i = 0, j = 0; //i表示当前搜索串的起始位置,j表示当前搜索串的结束位置 

  int maxLen = 0;  

  bool exist[256] = { false }; //表示当前字符在当前搜索串中有没有出现 

  while (j < n) {  

    if (exist[s[j]]) { //如果当前串中出现了该字符 

      maxLen = max(maxLen, j-i);  //计算当前字符的长度,如果大于原来的最大长度,则把它赋值给最大长度

      while (s[i] != s[j]) { //例如当前串为bacd,i指向b,j指向字符a 

        exist[s[i]] = false;  //这种情况下就需要把b标志为不在当前串中,起始位置后移,重新扫描新子串

        i++;  

      }  

      i++;  

      j++;  

    } else { //当前字符如果在搜索串中没有出现 ,标记它为当前串中的字符

      exist[s[j]] = true;  

      j++;  

    }  

  }  

  maxLen = max(maxLen, n-i);  //空串和字符串的情况

  return maxLen;  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐