//用string的每一个元素开始往后查找直到出现重复字母为止,求出每一个结果返回最大值 时间复杂度O(n2)
  int lengthOfLongestSubstring(string s) {
    int res = 0;
    for(auto i = s.begin(); i != s.end(); ++i) {
      set<char> iset;//用set来查找和保存每一个string元素
      for(auto j = i; j != s.end(); ++j) {
        if(iset.find(*j) == iset.end())
          iset.insert(*j);
        else
          break;
      }
      res = res < iset.size()? iset.size() : res;
      if(res >= s.size() - (i - s.begin()))
        break;
    }
    return res;
  }
最优解 用一个ascii长度256大小的数组保存string每个字符的位置,遍历string一次,找到重复的元素时对比O(n)
 int lengthOfLongestSubstring(string s) {
        vector<int> dict(256, -1);
        int maxLen = 0, start = -1;
        for (int i = 0; i != s.length(); i++) {
            if (dict[s[i]] > start)
                start = dict[s[i]];
            dict[s[i]] = i;
            maxLen = max(maxLen, i - start);
        }
        return maxLen;
    }
                    
                
                
            
        
浙公网安备 33010602011771号