Longest Substring Without Repeating Characters

来源:互联网 发布:电脑配置java环境 编辑:程序博客网 时间:2024/05/10 01:46

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:思路:将所有的不重复字符串放在矢量数组当中,然后依次比较字符串的长度大小

class Solution {private:vector<vector<char>*>root;public:int lengthOfLongestSubstring(string s) {constchar* _str = s.c_str();int len = s.length();vector<char>* tmp = NULL;vector<char>::iterator itr;int i = 0;int nCount = 0;if (len == 0)return 0;for (; i < len; i++){const char* cur = _str + i;if (tmp != NULL){itr = find(tmp->begin(), tmp->end(), cur[0]);if (itr != tmp->end()){//找到了重复的字符串i = nCount++;//并把当前vector放在链表当中root.push_back(tmp);tmp = NULL;}else{tmp->push_back(cur[0]);}}else{tmp = new vector<char>();tmp->push_back(cur[0]);}}if (tmp != NULL){root.push_back(tmp);}int max = root.at(0)->size();vector<vector<char>*>::iterator itr_1 = root.begin();for (; itr_1 != root.end(); itr_1++){if (max < (*itr_1)->size())max = (*itr_1)->size();}return max;}~Solution(){vector<vector<char>*>::iterator itr_1 = root.begin();for (; itr_1 != root.end(); itr_1++){delete* itr_1;}}};
方案2:思路--设置指针start和end两个指针,我们使用tmp从start到end进行移动,如果没有检查到重复字符,则重设max大小,

              如若检查到重复字符,则检查当前不重复大小,进行比较,start++,重新下一轮测试。

              note:如果内轮循环结束,重新进行外轮循环时,则需计算max,因为有可能是最后的不重复字符串。

class Solution {public:int lengthOfLongestSubstring(string s) {int len = s.length();if (len == 0)return len;const char*start = s.c_str();const char*end = start;int max = 0;for (; start!=s.c_str()+len; start++){bool mark = false;const char* tmp = start;for (end = start; end != s.c_str() + len; end++){tmp = start;for (; tmp != end; tmp++){if (tmp[0] == end[0]){mark = true;break;}}if (mark){//记录当前不重复的大小,与max进行比较,重置iint cur_len = end - start;if (max < cur_len){max = cur_len;}break;}else{//没有找到,则end++,直接进行下一步操作tmp = end;}}if ( (!mark)){int cur_len = end - start;if (max < cur_len){max = cur_len;}}}return max;}};


0 0
原创粉丝点击