本文主要是介绍[补题记录]Leetcode 3.无重复字符的最长子串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
传送门:无重复字符的最长子串
Problem/题意
给一个由英文、数字、符号、空格组成的字符串,找出其中不含有重复字符
的最长子串
的长度。
比如:abb 包含了重复字符 b;abc 没有包含重复字符。
注意是子串,不是子序列。
Thought/思路
要知道一个区间内是否包含了重复字符,我们可以用 哈希
来保存现有字符的存在情况。
不断扩大数组长度,当遇到重复字符的时候就停止扩大,然后结算一次答案。
最后移动左指针的时候将其对应字符标记为未访问
即可。
Code/代码
class Solution {
public:int lengthOfLongestSubstring(string s) {std::map <char, int> mp;int ans = 0;for (int l = 0, r = -1; l < s.length(); ++ l) {while (mp[s[r + 1]] != 1 && r + 1 < s.length()) {mp[s[++ r]] = 1;}ans = std::max(ans, r - l + 1);mp[s[l]] = 0;}return ans;}
};
这篇关于[补题记录]Leetcode 3.无重复字符的最长子串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!