Leetcode 438. Find All Anagrams in a String 找变位子串 解题报告
来源:互联网 发布:linux下jdk怎么卸载 编辑:程序博客网 时间:2024/06/06 02:16
1 解题报告
这道题,其实也就是要求从S中找到一个子串,这个子串变化后可以得到P(其实就是这个子串的26字母的分布和P一样)
所以自然而然的,我使用了最naïve的方式,就是直接滑动窗口(长度为P的大小),检查S的每一个子串的分布情况和P是否一样就可以了。
当然还可以优化检查的流程,但是既然AC了,我就不优化了~~~等不能通过那天再说
2 原题
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".
3 AC解
public class Solution { private boolean check(int counter[],int tmp[]){ for(int i=0;i<26;i++) if (counter[i] != tmp[i]) return false; return true; } /** * 滑动窗口+每滑动一次就检查一次 * */ public List<Integer> findAnagrams(String s, String p) { List<Integer> res = new ArrayList<Integer>(); if(s.length() < p.length()) return res; char S[] = s.toCharArray(); char P[] = p.toCharArray(); int counter[] = new int[26]; int tmp[] = new int[26]; for(char c:P) counter[c-'a']++; for(int i=0;i<P.length;i++) tmp[S[i]-'a']++; if(check(counter,tmp)) res.add(0); for(int i=P.length;i<S.length;i++){ tmp[S[i-P.length]-'a']--; tmp[S[i]-'a']++; if(check(counter,tmp)) res.add(i-P.length+1); } return res; }}
0 0
- Leetcode 438. Find All Anagrams in a String 找变位子串 解题报告
- [leetcode] 438. Find All Anagrams in a String 解题报告
- [Leetcode] 438. Find All Anagrams in a String 解题报告
- LeetCode Find All Anagrams in a String
- leetcode: Find All Anagrams in a String
- [LeetCode]Find All Anagrams in a String
- Leetcode Find All Anagrams in a String
- LeetCode : Find All Anagrams in a String
- leetcode[Find All Anagrams in a String]
- leetcode 438. Find All Anagrams in a String
- LeetCode 438. Find All Anagrams in a String
- LeetCode 438. Find All Anagrams in a String
- 【leetcode】438. Find All Anagrams in a String【E】
- [leetcode]438. Find All Anagrams in a String
- [LeetCode] 438. Find All Anagrams in a String
- LeetCode笔记:438. Find All Anagrams in a String
- LeetCode 438. Find All Anagrams in a String
- Leetcode 438. Find All Anagrams in a String (Easy) (cpp)
- tensorflow安装(一)
- kettle数据同步
- java引用数据类型-数组
- PHP7扩展开发入门
- java-数组赋值
- Leetcode 438. Find All Anagrams in a String 找变位子串 解题报告
- 交叉编译(cross compile)的一些介绍
- 【洛谷 1016】 旅行家的预算
- list.addAll()是浅拷贝,如何实现list的深拷贝
- 看不懂的python矩阵处理
- Android api level对照表
- Android ViewGroup指定子View的绘制顺序
- 第2 天
- 第七周项目3——负数把正数赶出队列