Leetcode 3.无重复字符的最长子串
Leetcode 3.无重复字符的最长子串
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

试过hashmap的方法,就是遍历整个字符串(1个for循环),把每个字符放入hashmap中,如果当前字符之前在hashmap中出现过,就将此字符和它之前的字符全部删除(第2个for循环),但是时间复杂度超了,发现要想时间复杂度不超,仍然需要类似双指针的方法对hashmap的方法中第2个循环做改进。一维坐标的动态规划应该也能做,但可能也会涉及到2个循环时的改进。
于是代码最后使用双指针进行了实现。思路比较简单(看下面代码和注释应该就能看懂)。代码如下:
class Solution {
public:int lengthOfLongestSubstring(string s) {if (0 == s.length()) {return 0;}int maxLen = 0;//两根指针间最大距离int left = 0, right = 0;for (right = 0; right < s.length(); ++right) {//1. 对两根指针间元素遍历,如果有元素等于右指针就更新左指针for (int i = left; i < right; ++i) {if (s[i] == s[right]) {left = i + 1;}}//2. 维持最大窗长(即left与right之间的最大距离)maxLen = max(maxLen, right - left + 1);}return maxLen;}
};
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
