lintcode,最长无重复字符的子串
来源:互联网 发布:python 字典值为空 编辑:程序博客网 时间:2024/05/18 17:56
给定一个字符串,请找出其中无重复字符的最长子字符串。
样例
例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。
对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。
一刷没有ac
下面链接里面解释的很清楚,可以参考
http://blog.csdn.net/imabluefish/article/details/38662827
二刷没有ac,还是错在了map.get(ch) >= start这里
思路一:建立map存储字符和位置,一旦遇到重复的字符,就会跳回到第一次出现重复字符的下个字符开始重新计数。
public class Solution { /** * @param s: a string * @return: an integer */ public int lengthOfLongestSubstring(String s) { if (s == null || s.length() == 0) return 0; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); int res = 0; int len = 0; for(int i = 0; i < s.length(); i++){ if(map.containsKey(s.charAt(i))){ i = map.get(s.charAt(i)); map.clear(); len = 0; continue; } len++; map.put(s.charAt(i),i); res = Math.max(res,len); } return res; }}
思路二:为了避免每次重建map,用一个start来记录开始的索引。用len来记录长度,在遍历字符串的过程中,每次判断字符是否包含在map中,如果包含并且包含的字符首次出现在start之后(因为start一定是越来越大的呀),则重置start为重复出现字符的下个字符,然后计算此时的len,并且判断是否最大。
public class Solution { /** * @param s: a string * @return: an integer */ public int lengthOfLongestSubstring(String s) { if (s == null || s.length() == 0) return 0; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); int res = 0; int len = 0; int start = 0; for(int i = 0; i < s.length(); i++){ if(map.containsKey(s.charAt(i)) && map.get(s.charAt(i)) >= start){ start = map.get(s.charAt(i)) + 1; } len = i - start + 1; map.put(s.charAt(i),i); res = Math.max(res,len); } return res; }}
0 0
- LintCode-最长无重复字符的子串
- LintCode-最长无重复字符的子串
- LintCode:最长无重复字符的子串
- 最长无重复字符的子串 lintcode
- lintcode,最长无重复字符的子串
- lintcode(384)最长无重复字符的子串
- lintcode--最长无重复字符的子串
- [LintCode]384.最长无重复字符的子串
- LintCode:M-最长无重复字符的子串
- [LintCode 384] 最长无重复字符的子串(Python)
- lintcode最长无重复字符的子串
- LintCode 最长无重复字符的子串
- 最长无重复字符的子串-LintCode
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- android.useDeprecatedNdk=true 添入工程根目录下的新建 gradle.properties 文件
- 前台、后台、前端、后端的区别
- 1097. Deduplication on a Linked List (25)
- bzoj 2288: 【POJ Challenge】生日礼物 贪心+优先队列
- lintcode,最长无重复字符的子串
- HDU 3746 字符串匹配(字符串的最小循环节问题)
- 链表中基数排序
- discuz学习记录:在模板文件中显示语言包中的某个值
- iOS 录制视频并上传
- 并发无锁队列学习(一)
- ubuntu16.04 安装 gtk3.0
- 国内一线互联网公司Android内部面试题库
- 水仙花数