贪心法应用:不含重复字符的最长子串
2015-06-05 10:38
363 查看
#include <iostream> using namespace std; int LenOfLongestSubString(string s) //注:一般子串都是连续的(substring),子序列不要求连续 { const int ASCIINUM = 26; int last[ASCIINUM]; //记录上次出现这个字符的位置 for (int i = 0; i < ASCIINUM; i++) { last[i] = -1; } int start = 0; //当前处理的子串的起始位置 int maxLen = 0; for (int i = 0; i < s.size(); i++) { if (last[s[i] - 'a'] >= start) //字符第二次出现 { maxLen = max(i-start, maxLen); //根据比较更新最长子串 start = last[s[i] - 'a'] + 1; //更新搜索的起始位置为上一个重复字母位置+1 } last[s[i] - 'a'] = i; //更新当前访问字母的上一次访问位置为当前位置 } return max((int)s.size()-start, maxLen); //不要忘记处理最后一次扫到字符串末尾的长度 } int main() { string s = "qpxrjxkltzyx"; cout << LenOfLongestSubString(s) << endl; return 0 ; }
相关文章推荐
- 1001 害死人不偿命的(3n+1)猜想 (15)
- mysql主从
- ExtJS 修改load paging时的参数
- Android 登陆页面 记住密码和自动登陆的简单实现
- 17. Letter Combinations of a Phone Number
- 常用算法之-快速排序
- js table增加一行,显示每列总和
- samba4安装使用
- 【C++】多个类的DLL封装及调用
- Android之StrictMode应用性能分析
- 喜欢、爱
- 判断一个对象是否为jquery对象的方法
- suibi
- Sublime Text 2 和 Verilog HDL
- [iOS]CocoaPods安装
- VARCHAR2 占几个字节? NLS_LENGTH_SEMANTICS,nls_language
- linux下删除默认mysql和安装mysql5.6以及1130错误
- 客户管理系统之模块设计(七)
- disable_irq()与disable_irq_nosync()区别
- swift container server 莫名stuck