题目描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
假设字符串中只包含从’a’到’z’的字符。
样例
Input:"abcabc"
Output:3
解题思路
-
描述
本题目可使用双指针算法。
使用两个指针 i 和 j ,i 和 j 之间维护的是不包含重复字符的子字符串。
判断是否包含重复字符,可使用哈希表。
-
实现代码:
/* 包含头文件: #include <unordered_map> // STL中哈希表的具体实现 */ int longestSubstringWithoutDuplication(string s) { unordered_map<char,int> count; int res = 0; for(int i=0,j=0;j < s.size();j++) { if(++count[s[j]] > 1) // 表明当前字符重复 { while(count[s[i]] == 1) // 移动i指针使得i和j之间没有重复字符 { count[s[i]]--; i++; } count[s[i]]--; i++; } res = max(res,j-i+1); // 获取最长的字符串 } return res; }