字符串中不重复连续字符子串的长度最大值
来源:互联网 发布:罗辑思维 人工智能 编辑:程序博客网 时间:2024/05/22 04:26
森林举行运动会,小伙伴们身上每个都印着一个字符标记,排成一列,委员会要挑出每列里相邻小伙伴身上没有重复字符标记的,最多能挑出几个?
比如:小伙伴们的字符标记串起来是“ccccccbc” 那相邻的小伙伴身上没有重复的字符标记是cb或者bc,那这个人数就是2。
比如:小伙伴们的字符标记串起来是“ccccccbc” 那相邻的小伙伴身上没有重复的字符标记是cb或者bc,那这个人数就是2。
这题的意思是要记录一个字符串中,无重复子字符串的长度的最大值。案例中cb的长度是2,bc的长度也是2所以返回值是2.
要立即对题目的意思再开始做题!!!
此处,用一个map<>存储字符串中<字符,最近一次出现位置>,通过curStart变量记录最近一个无重复字符串的起始位置。
解答:
public static int lengthOfLongestSubstring(String s) {
Map<Character, Integer> index = new HashMap<>(); // 存放字符最近一次出现的位置
int curStart = 0, curLen = 0, maxLen = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i); // 添加字符c到一个已有的无重复字符子串结尾
if (index.containsKey(c) && index.get(c) >= curStart) { // 字符c已经在这个无重复字符子串中
curStart = index.get(c) + 1; // 更新当前无重复字符子串的起点
}
curLen = i - curStart + 1; // 当前无重复字符子串的长度
if (curLen > maxLen) {
maxLen = curLen;
}
index.put(c, i);
}
return maxLen;
}
Map<Character, Integer> index = new HashMap<>(); // 存放字符最近一次出现的位置
int curStart = 0, curLen = 0, maxLen = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i); // 添加字符c到一个已有的无重复字符子串结尾
if (index.containsKey(c) && index.get(c) >= curStart) { // 字符c已经在这个无重复字符子串中
curStart = index.get(c) + 1; // 更新当前无重复字符子串的起点
}
curLen = i - curStart + 1; // 当前无重复字符子串的长度
if (curLen > maxLen) {
maxLen = curLen;
}
index.put(c, i);
}
return maxLen;
}
阅读全文
0 0
- 字符串中不重复连续字符子串的长度最大值
- 从字符串S中找出不包含重复字符的最大连续子字符串长度
- 字符串最长不含重复字符的子串长度
- 求一个字符串中字符不重复的连续的子串
- 求字符串中不包含重复字符的最长子串的长度
- lc#3求字符串中不包含重复字符的最大长度子串
- 求字符串中不重复字符的最长子串
- 求字符串的不重复字符的最长子串长度的问题
- 求字符串的不重复字符的最长子串长度的问题
- 给定一个字符串,返回字符串中没有重复字符的最长子串的长度
- 统计字符串中连续出现某些字符的最大子串长度
- 找出字符串的最长不重复子串,输出长度
- 找出字符串的最长不重复子串,输出长度
- 找出字符串的最长不重复子串,输出长度
- 求字符串中不重复的最长子串的长度
- 求字符串中最长连续数字子串的长度
- 求字符串中最长连续数字子串的长度
- 字符串中连续最长重复子串
- O(n)回文子串(Manacher)算法
- ds & hdmi 原理
- 对离散型随机变量期望的理解
- 天天学Linux命令1--删除n天前日志
- 配置虚拟机的ip的过程。
- 字符串中不重复连续字符子串的长度最大值
- JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线
- 畅通工程续
- google thrift
- jquery计时器粘贴可用
- Python多线程写入文件(multiprocessing template)
- JS的自定义类跟对象
- 1001(树状数组基本操作的合集)
- HDU --- 6082 度度熊与邪恶大魔王 【完全背包】