LeetCode 438: Find All Anagrams in a String
来源:互联网 发布:淘宝数据分析表格 编辑:程序博客网 时间:2024/05/16 17:26
题目描述:hhttps://leetcode.com/problems/find-all-anagrams-in-a-string/
题目本身并不难,这里主要比较两种方法在时间上的差异:
方法一:
每次去s中与q长度相等的字串,比较两个字符串是否为Anagram。
这种方法所需时间很长。
AC代码
/*794ms*/public class Solution { public List<Integer> findAnagrams(String s, String p) { List<Integer> list = new ArrayList<Integer>(); if(s==null || p==null || s.length()<p.length()){ return list; } for(int i=0; i+p.length()-1<s.length(); i++){ String sub = s.substring(i, i+p.length()); if(isAnagrams(sub, p)){ list.add(i); } } return list; } public boolean isAnagrams(String a, String b){ if(a==null || b==null || a.length()!=b.length()){ return false; } int[] chars = new int[26]; for(int i=0; i<a.length(); i++){ char ch = a.charAt(i); chars[ch-'a']++; } for(int i=0; i<b.length(); i++){ char ch = b.charAt(i); chars[ch-'a']--; if(chars[ch-'a']<0){ return false; } } return true; }}
方法二:
在比较两个字符串是否为Anamgram时,我们用的方法是统计两个字符串中,各个字母的数量是否相同。那么其实当我们将某一个字串与字符串P比较时,并不需要从头开始统计,只需要将上一次的统计结果稍做修改就可以了:上一个子串的第一个字母数量减一,本子串最后一个字母数量加一。
AC代码:
/*18ms*/public class Solution { 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; } private boolean check(int counter[],int tmp[]){ for(int i=0;i<26;i++) if (counter[i] != tmp[i]) return false; return true; }}
0 0
- 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
- [python]leetcode(438). Find All Anagrams in a String
- LeetCode 438 Find All Anagrams in a String
- LeetCode 438 Find All Anagrams in a String解析
- 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 解题报告
- 【leetcode】438. Find All Anagrams in a String【E】
- Azure CDN Smart Routing 功能正式上线
- 文献管理之histcite
- poj3255 次短路裸题
- A. Checking the Calendar
- Codeforces 734C. Anton and Making Potions
- LeetCode 438: Find All Anagrams in a String
- 类与对象
- 天赋 VS 勤奋,“一万小时定律” 没你想得那么简单
- Python正则表达式
- CSDN-markdown编辑器
- All in All
- oracle 锁机制
- Android Universal Image Loader 源码分析
- Memory Networks原理及其代码解析