中等_384_最长无重复字符的子串(6)
来源:互联网 发布:淘宝主图psd模版 编辑:程序博客网 时间:2024/06/17 07:05
class Solution {public: /** * @param s: a string * @return: an integer */ int lengthOfLongestSubstring(string s) { // write your code here int m[256] = {0}, res = 0, left = 0; for (int i = 0; i < s.size(); ++i) { if (m[s[i]] == 0 || m[s[i]] < left) {//判断数组s中的第一个元素的哈希值是否为0 res = max(res, i - left + 1); } else { left = m[s[i]]; } m[s[i]] = i + 1;//数组s中的第一个元素的哈希值赋值为i+1 } return res; }};
注:m[s[i]] = i + 1,当进入下一个循环时,若新取到的字符与上一个字符相同时,s[i] = s[i+1],则m[s[i]] = m[s[i+1]] = i+1不等于0,此时不进入if,进入else,更新left的位置。
后备知识:
1.a[]表示访问数组元素,比如int a[10]定义了长度为10的整型数组,标号从0-9,a[3]就表示下标为3的元素(第四个)
2.a[100]={0}是什么意思?
一维数组a的第一个元素为0,a[100]指数组a最多有100个元素
3.==与=的区别
=:是赋值,使值为=后的数。
==:是比较,是与==后的数进行比较,相等为真,如果不相等为假。
问题描述:
给定一个字符串,请找出其中无重复字符的最长子字符串。
样例
例如,在"abcabcbb"
中,其无重复字符的最长子字符串是"abc"
,其长度为 3
。
对于,"bbbbb"
,其无重复字符的最长子字符串为"b"
,长度为1
。
解题思路:
建立一个256位大小的整型数组来代替哈希表,这样做的原因是ASCII表共能表示256个字符,所以可以记录所有字符,然后我们需要定义两个变量res和left,其中res用来记录最长无重复子串的长度,left指向该无重复子串左边的起始位置,然后我们遍历整个字符串,对于每一个遍历到的字符,如果哈希表中该字符串对应的值为0,说明没有遇到过该字符,则此时计算最长无重复子串,i - left +1,其中i是最长无重复子串最右边的位置,left是最左边的位置,还有一种情况也需要计算最长无重复子串,就是当哈希表中的值小于left,这是由于此时出现过重复的字符,left的位置更新了,如果又遇到了新的字符,就要重新计算最长无重复子串。最后每次都要在哈希表中将当前字符对应的值赋值为i+1。
这里解释下程序中那个if条件语句中为啥要有个m[s[i]] < left,我们用一个例子来说明,当输入字符串为"abbca"的时候,当i=4时,也就是即将要开始遍历最后一个字母a时,此时哈希表表中a对应1,b对应3,c对应4,left为2,即当前最长的子字符串的左边界为第二个b的位置,而第一个a已经不在当前最长的字符串的范围内了,那么对于i=4这个新进来的a,应该要加入结果中,而此时未被更新的哈希表中a为1,不是0,如果不判断它和left的关系的话,就无法更新结果,那么答案就会少一位,所以需要加m[s[i]] < left。
具体参见原博:http://www.cnblogs.com/grandyang/p/4480780.html
- 中等_384_最长无重复字符的子串(6)
- 384.Longest Substring Without Repeating Characters-最长无重复字符的子串(中等题)
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符的子串
- 最长无重复字符子串
- 最长无重复字符子串
- 最长无重复字符子串
- 最长无重复字符子串练习题
- 最长无重复字符子串
- 最长无重复字符子串
- 最长无重复字符子串
- 最长无重复字符子串
- 从零开始开发一个全栈Web应用实录
- JavaScript 选择框 选项移动
- 街拍美图获取
- 浅谈 c++中的内存存储
- 妙解网站流量的处理办法
- 中等_384_最长无重复字符的子串(6)
- leetcode之Combination Sum 问题
- nginx负载均衡、动静分离
- Python验证码识别处理实例
- git对比同一project不同分支的差异
- memcached的一些研究(关于memcached的内存分配机制)
- Cesium学习笔记(二)Imagery Provider
- day07-apache Tomcat的概述以及服务器的安装
- 一元二次方程求解 使用c++ class编写