Longest Substring Without Repeating Characters
2015-07-01 14:47
190 查看
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:思路:将所有的不重复字符串放在矢量数组当中,然后依次比较字符串的长度大小
如若检查到重复字符,则检查当前不重复大小,进行比较,start++,重新下一轮测试。
note:如果内轮循环结束,重新进行外轮循环时,则需计算max,因为有可能是最后的不重复字符串。
of 1.
问题描述:
在已给定的字符串中寻找最长不重复的字符序列
解决方案1:思路:将所有的不重复字符串放在矢量数组当中,然后依次比较字符串的长度大小
class Solution { private: vector<vector<char>*>root; public: int lengthOfLongestSubstring(string s) { const char* _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进行比较,重置i int 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; } };
相关文章推荐
- angularjs 信息链接 转摘自:http://www.zhihu.com/question/27427447
- Tomcat 7最大并发连接数的正确修改方法
- GRE逻辑阅读——定语从句结构
- Scala学习笔记一
- 写六月的总结
- Java数据结构(二):线性表之顺序表
- YII2 服务器验证码不显示
- [ERP]LRP与MRP的最大差异
- MD5算法的原理与实现
- Longest Valid Parentheses——仍然需要认真看看(动态规划)
- 2015.7.1 反弹的教训(以为股票都会上涨)
- 修改RMAN list命令输出的时间格式
- win7系统查看账户属性出错 提示工作站服务没有启动的详细解决办法
- 孤儿进程与僵尸进程[总结]
- VMware下扩展Ubuntu根文件大小的方法
- Leetcode 116 Populating Next Right Pointers in Each Node 二叉树填充next指针指向右侧结点
- TimesTen学习资料大汇总
- Java基础复习(二)
- Ubuntu 12.04 64bit 无法识别交叉编译器解决办法
- linux下使用rsync实现目录下大量文件的删除