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

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;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值