zoukankan      html  css  js  c++  java
  • [每日一题2020.06.18]leetcode #3 hash_map实现滑动窗口

    1592377167260

    解 :

    利用hashmap ( C++中的unordered map, map也行不过map基于红黑树速度慢点 ) 保存每一个字符第一次出现的位置, 用一个r ( 窗口右侧 ) 向后遍历, 找到第一个出现在map里的数, 更新l (窗口左侧) 为 map[s[r]] + 1, 实现窗口的滑动, 窗口没加入一个元素更新一次ans = max(ans, cnt) , 最后return ans

    #include<bits/stdc++.h>
    using namespace std;
    
    int lengthOfLongestSubstring(string s) {
    	int ans = 0;
    	int cnt = 0;
    	unordered_map<char, int> mp;
    	int r = 0;
    	int l = 0;
    	while (r < s.size()) {
    		if (!mp.count(s[r]) || mp[s[r]] < l) {
    			mp[s[r]] = r;
    			cnt++;
    		}
    		else {
    			cnt = r - mp[s[r]];
    			l = mp[s[r]] + 1;
    			mp[s[r]] = r; 
    		}
    		ans = max(ans, cnt);
    		r++;
    	}
    	return ans;
    }
    
    
    
    int main() {
    	freopen("in.txt", "r", stdin);
    	freopen("out.txt", "w", stdout);
    
    	string s;
    	cin >> s;
    	cout << lengthOfLongestSubstring(s) << endl;
    
    	return 0;
    }
    
  • 相关阅读:
    实心菱形
    进制转换
    简单题目
    一元二次方程求解
    反转整数
    最大公约数
    数老鼠
    “鱼额宝”
    数组第K小数
    最大子数组和
  • 原文地址:https://www.cnblogs.com/roccoshi/p/13152488.html
Copyright © 2011-2022 走看看