leetcode 3 Longest Substring Without Repeating Characters

来源:互联网 发布:微信网络诈骗投诉电话 编辑:程序博客网 时间:2024/06/03 13:38

题目:
这里写图片描述

想法:
用hash表存储,可以使查询时间降到O(1),两次循环遍历,实践复杂度为O(n2)
代码如下:

class Solution {public:    int lengthOfLongestSubstring(string s) {        int i, j;    int zm[256];    int len1 = s.length();    int len2;    int lengthmost, lengtheach;    lengthmost = 0;    for (i = 0; i < len1; i++) {        if (len1 - i < lengthmost)            break;        lengtheach = 0;        memset(zm, 0, 256*sizeof(int));        for (j = i; j < len1; j++) {            if (zm[s[j] ]> 0) {                break;            }            else {                zm[s[j]]++;            }        }        lengtheach = j - i ;        if (lengtheach > lengthmost) {            lengthmost = lengtheach;        }    }    return lengthmost;    }};

实际上有O(n)的算法,该博客上给出了详细的解释
http://blog.csdn.net/feliciafay/article/details/16895637
核心思想是i,j最多都只遍历一次string。

代码如下:

int lengthOfLongestSubstring(string s) {    int n = s.length();    int i =  0, j = 0;    int maxLen = 0;    bool exist[256] = { false };    while (j < n) {      if (exist[s[j]]) {       maxLen = max(maxLen, j-i);        while (s[i] != s[j]) {          exist[s[i]] = false;        i++;        }        i++;        j++;      } else {        exist[s[j]] = true;        j++;      }    }    maxLen = max(maxLen, n-i);    return maxLen;  }  
0 0