`

Longest Substring Without Repeating Characters

 
阅读更多

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

 

思路:1、用一个数组来记录字符是否出现。2、当一个字符重复了,那么当前可以得到一个可能是最长的无重复字符的子字符。

 

#include <iostream>
#include <string>
using namespace std;

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 = maxLen>=j-i?maxLen:j-i;  
            while (s[i] != s[j]) {
                exist[s[i]] = false;  //
                i++;
            }
            i++;  //新的开始位置
            j++;  //从i到j是不会有重复的
        } else {
            exist[s[j]] = true;
            j++;
        }
    }
    maxLen = maxLen>= n-i?maxLen:n-i;
    return maxLen;
}

int main(){
	string s("hello");
	cout<<lengthOfLongestSubstring(s);
	return 0;
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics