第三题:Longest Substring Without Repeating Characters

题目链接:题目链接

找到最长不重复子串,使用hash方法来做是极好的!遍历string,找到一个字符,然后会判断这个字符是不是已经在当前的这个子串中,这个使用hash方法,因为可见字符最多256个,那么使用hash[256]就可以!初始化为-1,保存的是相应的字符在string中的位置。如果遇到在前面存在的字符,那么需要将这个子串的start位置移动到已经存在的位置后面一位,然后继续遍历,直到遍历结束。

具体看下面的代码:

class Solution {public:int lengthOfLongestSubstring(string s) {int max_len = 0, start = 0, i = 0, n = s.length(), len = 0;int hash_elem[256];memset(hash_elem, -1, sizeof(hash_elem));while (i < n){// hash_elem[s[i]] < 0说明:是新的字符,之前没有出现过// hash_elem[s[i]] < start说明:字符出现过,但是已经作废// 例如: abcdb// 我们遍历到abcd,然后发现b重复,那么后面其实是从c开始,// 但是a由于b的影响也就被作废了,但是这个时候a在hash_elem中// 的下标还是0,,但是小于start,所以相当于也是合法的字符//if (hash_elem[s[i]] < 0 || hash_elem[s[i]] < start)++len;else{max_len = max_len > len ? max_len : len;// 注意吧前面的字符减掉//len -= hash_elem[s[i]] – start;// 新的位置从重复字符的位置后面一位开始//start = hash_elem[s[i]] + 1;}hash_elem[s[i]] = i;++i;}return max_len > len ? max_len : len;}};

没有什么可留恋,只有抑制不住的梦想,

第三题:Longest Substring Without Repeating Characters

相关文章:

你感兴趣的文章:

标签云: