class Solution { public: int lengthOfLongestSubstring(string s) { map<char,int> hash; int ans = 0; int n= s.size(); for(int i= 0, j=0;j<n;j++){ if(hash.find(s[j])!=hash.end()) i=max(hash.find(s[j])->second+1,i); //当发现重复字符时,i直接跳到重复字符的下一位,改进了方法2中一个字符一个字符滑动窗口的方法 ans=max(ans,j-i+1); hash[s[j]]=j; } return ans; } };
时间: 2024-04-05 11:35:22 浏览: 48
java 中String.equals和==的比较
5星 · 资源好评率100%
这是一个使用滑动窗口算法解决无重复字符的最长子串问题的C++代码,使用了哈希表存储字符出现的位置。算法的时间复杂度为O(n),其中n为字符串的长度。代码中的map容器是C++ STL中的关联容器,用于存储键值对,本代码中用来存储字符出现的位置。在遍历字符串时,维护两个指针i和j,分别表示子串的起始和结束位置,同时使用哈希表判断字符是否重复出现。当发现重复字符时,i直接跳到重复字符的下一位,避免了一个字符一个字符滑动窗口的方法,提高了算法的效率。最后返回最长子串的长度。
阅读全文