Longest Substring Without Repeating Characters
来源:互联网 发布:中国人没有信仰 知乎 编辑:程序博客网 时间:2024/06/06 01:58
题目:求字符串最大不重复子串的长度。
方法1:动态规划
遍历字符串到下标 i i时,若 s[i] 在以下标 i - 1 的不重复子串中重复出现,则找到其位置 j ,当前不重复子串的长度dp为 i - j 。若没有重复出现,则当前不重复子串长度为上一个不重复子串长度加1。
int lengthOfLongestSubstring(string s){int dp = 1; /*不重复子串的长度*/int last_start = 0; /*不重复子串的起始位置*/int maxLen = 0; if(s.size() == 1) /*字符串只有一个字符的情况*/ { return dp; }for(int i = 1; i < s.size(); i++) {for(int j = i - 1; j >= last_start; j--){if(s[i] == s[j]) /*字符重复出现*/{dp = i - j;last_start = j + 1;break;}else if(j == last_start) /*从start到i-1无重复字符*/{dp++;}}if(dp > maxLen){maxLen = dp;}}return maxLen;}
方法2:动态规划+hash
用哈希表保存每个字符 s[i] 在字符串中的最新位置(即i最大处),从而不需要利用循环往回寻找 s[i] 是否重复出现。
int lengthOfLongestSubstring(string s){int maxLen = 0;int curLen = 1; /*保存当前不重复子串的长度*/int visit[256]; /*保存每个字符的位置*/memset(visit, -1, sizeof(visit)); /*visit初始化为-1*/ visit[s[0]] = 0; int last_start = 0; /*保存不重复子串的起始位置*/ if(s.size() == 1) /*字符串只有一个字符的情况*/ { return curLen; }for(int i = 1; i < s.size(); i++){if(last_start <= visit[s[i]]) /*当前字符s[i]重复出现,且在上一个不重复子串范围内*/{curLen = i - visit[s[i]];last_start = visit[s[i]] + 1; /*更新不重复子串的起始位置和当前字符的位置*/visit[s[i]] = i;}else{curLen++;visit[s[i]] = i;}if(curLen > maxLen){maxLen = curLen;}}return maxLen;}
0 0
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- linux下/proc目录介绍
- 企业级发布内测版本
- python 除法和乘方
- NSArray 与 NSMutableArray 常用方法
- android 一个问题
- Longest Substring Without Repeating Characters
- iOS开发动画(Animation)图片360度不停旋转
- Solr 函数查询(FunctionQuery)原理分析
- 简单时间编程
- Android 那些你所不知道的Bitmap对象详解
- 第15周上机实践项目1——打入“内部”寻“内幕”
- 添加第三方类库造成的linker command failed with exit code 1 (use -v to see invocation)的错误调试
- 山地速降,玩的就是心跳
- Chrome多进程调试