1 Star 0 Fork 0

表情扭曲 / leetcode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
lc438.java 1.73 KB
一键复制 编辑 原始数据 按行查看 历史
liu13 提交于 2019-01-17 14:50 . 20190117
package code;
/*
* 438. Find All Anagrams in a String
* 题意:匹配相同字符组成的串
* 难度:Easy
* 分类:Hash Table
* 思路:滑动窗口,O(n)时间
* Tips:滑动窗口解法 https://leetcode.com/problems/find-all-anagrams-in-a-string/discuss/92007/Sliding-Window-algorithm-template-to-solve-all-the-Leetcode-substring-search-problem
* lc76类似
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class lc438 {
public static void main(String[] args) {
System.out.println(findAnagrams("cbaebabacd", "abc"));
}
public static List<Integer> findAnagrams(String s, String p) {
List<Integer> ls = new ArrayList<>();
if(s.length()<p.length())
return ls;
HashMap<Character, Integer> hm = new HashMap();
for (int i = 0; i < p.length() ; i++) {
hm.put(p.charAt(i), hm.getOrDefault(p.charAt(i), 0)+1);
}
int right = 0, left = 0, count = 0;
while(right<s.length()){
char ch_r = s.charAt(right);
char ch_l = s.charAt(left);
if(hm.containsKey(ch_r)){
hm.put(ch_r, hm.getOrDefault(ch_r,0)-1);
if(hm.get(ch_r)>=0) //注意count++的条件,多余的相同字符不用++了
count++;
}
if(count==p.length())
ls.add(left);
if(right-left+1==p.length()){ //左指针需要右移
if(hm.containsKey(ch_l)){
hm.put(ch_l, hm.get(ch_l)+1);
if(hm.get(ch_l)>0) //count--的条件
count--;
}
left++;
}
right++;
}
return ls;
}
}
1
https://gitee.com/abfantasy/leetcode.git
git@gitee.com:abfantasy/leetcode.git
abfantasy
leetcode
leetcode
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891