博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 438. Find All Anagrams in a String (在字符串中找到所有的变位词)
阅读量:5083 次
发布时间:2019-06-13

本文共 2238 字,大约阅读时间需要 7 分钟。

Given a string s and a non-empty string p, find all the start indices of p's anagrams in s.

Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.

The order of output does not matter.

Example 1:

Input:s: "cbaebabacd" p: "abc"Output:[0, 6]Explanation:The substring with start index = 0 is "cba", which is an anagram of "abc".The substring with start index = 6 is "bac", which is an anagram of "abc".

 

Example 2:

Input:s: "abab" p: "ab"Output:[0, 1, 2]Explanation:The substring with start index = 0 is "ab", which is an anagram of "ab".The substring with start index = 1 is "ba", which is an anagram of "ab".The substring with start index = 2 is "ab", which is an anagram of "ab".

 


题目标签:Hash Table

  题目给了我们两个string s 和 p, 让我们在 s 中 找到所有 p 的变位词。

  利用两个HashMap 和 Sliding window:

    先把 p 的char 和 出现次数 存入 mapP;

    然后遍历string s,利用 sliding window 把 和 p 一样长度的 string 的 char 保存在 tempMap 里,比较 tempMap 和 mapP。

 

 

 

Java Solution:

Runtime beats 20.00% 

完成日期:11/07/2017

关键词:HashMap

关键点:利用sliding window 把 tempMap 和 mapP 比较

1 class Solution  2 { 3     public List
findAnagrams(String s, String p) 4 { 5 List
list = new ArrayList<>(); 6 HashMap
mapP = new HashMap<>(); 7 HashMap
tempMap = new HashMap<>(); 8 9 for(char c: p.toCharArray()) // store p char and occurrence into mapP10 mapP.put(c, mapP.getOrDefault(c, 0) + 1);11 12 13 for(int i=0; i
= p.length()) // once reach to p's length, remove most left char21 {22 leftC = s.charAt(i - p.length());23 // remove left char24 if(tempMap.get(leftC) == 1)25 tempMap.remove(leftC);26 else27 tempMap.put(leftC, tempMap.get(leftC) - 1);28 }29 30 if(tempMap.equals(mapP))31 list.add(i + 1 - p.length());32 33 34 }35 36 return list;37 }38 }

参考资料:N/A

 

LeetCode 题目列表 - 

转载于:https://www.cnblogs.com/jimmycheng/p/7802193.html

你可能感兴趣的文章
5月29日任务 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志
查看>>
堆和栈
查看>>
Etag和断点续传(转)
查看>>
atomic/nio
查看>>
git使用问题
查看>>
用StreamReader提取xml或者记事本里面的信息
查看>>
需求分析
查看>>
《将博客搬至CSDN》
查看>>
erlang 游戏服务器开发
查看>>
一个完整的socket recv()案例,包括解决粘包、服务器主动推数据的问题
查看>>
运行nodejs的blog程序遇见问题
查看>>
sql server 导出脚本和数据 (图解)
查看>>
python自然语言处理——3.7 用正则表达式为文本分词
查看>>
俄罗斯方块html
查看>>
Ubuntu 16.04安装indicator-sysmonitor实现导航条显示上下行网速/CPU/内存使用率
查看>>
MyBatis3-SqlSessionDaoSupport的使用
查看>>
Linux 命令行快捷键
查看>>
ElasticSearch安装为Windows服务
查看>>
泰坦尼克号
查看>>
关于对文件的操作
查看>>