滑动窗口(算法)

一、算法分享:滑动窗口

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

思路

  • 定义一个 map 数据结构存储 (k, v),其中 key 值为字符,value 值为字符位置 +1,加 1 表示从字符位置后一个才开始不重复
  • 我们定义不重复子串的开始位置为 start,结束位置为 end
  • 随着 end 不断遍历向后,会遇到与 [start, end] 区间内字符相同的情况,此时将字符作为 key 值,获取其 value 值,并更新 start,此时 [start, end] 区间内不存在重复字符
  • 无论是否更新 start,都会更新其 map 数据结构和结果 ans。
  • 时间复杂度:O(n)

代码实现 

import java.util.HashMap;

/**
 * 滑动窗口
 */
@SuppressWarnings("all")
class Solution {
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        int ans = 0;
        for(int start = 0,end = 0;end < s.length();end++){
            char charAt = s.charAt(end);
            if(map.containsKey(charAt)){
                start = Math.max(map.get(charAt),start);
            }
            map.put(charAt,end+1);
            ans = Math.max(end-start+1,ans);
        }
        return ans;
    }

    public static void main(String[] args) {
        Solution test = new Solution();
        System.out.println(test.lengthOfLongestSubstring("dvdf"));
    }
}

相关推荐

  1. 滑动窗口算法

    2024-01-27 13:42:02       53 阅读
  2. 算法专题:滑动窗口

    2024-01-27 13:42:02       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-27 13:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 13:42:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 13:42:02       82 阅读
  4. Python语言-面向对象

    2024-01-27 13:42:02       91 阅读

热门阅读

  1. 算法训练营Day56(动态规划16)

    2024-01-27 13:42:02       52 阅读
  2. vcenter 里面有一台主机无法进行DRS处理实践。

    2024-01-27 13:42:02       52 阅读
  3. SQL 关键字参考手册(三)

    2024-01-27 13:42:02       40 阅读
  4. 编程笔记 html5&css&js 059 css多列

    2024-01-27 13:42:02       43 阅读
  5. 用于 C/C++ Debug 的宏函数

    2024-01-27 13:42:02       51 阅读
  6. 练习12.5_按键_Python编程:从入门到实践(第3版)

    2024-01-27 13:42:02       50 阅读
  7. mysql MVCC(多版本并发控制)的实现原理

    2024-01-27 13:42:02       47 阅读
  8. ajax上传附件进度条取消上传

    2024-01-27 13:42:02       45 阅读