【力扣】面试经典150题总结02-双指针、滑动窗口
1.验证回文串(简单)
用toLowerCase()转为小写字母,然后前后指针向中间进行比对。
2.判断子序列(简单)
两个指针一个指向长字符串,另一个指向短字符串。匹配就都+1,不匹配就将长字符串指针+1。长字符串指针遍历完前把短字符串匹配完则返回true,否则false。
3.两数之和II(中等)
找到数组中相加和等于target的两个数。数组是非递减顺序,所以可以前后指针。如果前后指针之和>target,就把后指针-1,<target则+1,等于则返回答案。
4.盛水最多的容器(中等)
前后指针。判断那边更高,矮的一边往中间移动,每次维护最大容量。
5.三数之和(中等)
找数组中三个数和为0。外循环i跳过重复元素,创建前后指针left和right,left从i+1开始,right从n-1开始。如果三数之和==0,存进数组并且跳过左右的重复元素、<0则left++、>0则right--。
6.长度最小的子数组(中等)
滑动窗口。记录start和end,每次累加end的值到sum中。如果sum<target,就让end后移,否则便符合题意>=target,将start右移,sum-=start的值。用Integer.MAX_VALUE作为result的初值,并在>=target时更新。
7.无重复字符的最长子串(中等)
滑动窗口+哈希表。右边界判断是否存在,不存在则加入哈希表,存在则将左边界移动到当前重复的位置,右边界移动到下一个位置。