leetcode438:找到字符串中所有字母异位词
文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Anagrams {
/***
* 438找到字符串中所有字母异位词
*/
public static List findAnagrams(String s1, String p1,List<Integer> result)
{
char []s;
char []p;
s=s1.toCharArray();//把字符串转变为字符数组,实现遍历字符串的每一个字符
p=p1.toCharArray();
if(s.length == 0||p.length == 0)
return result;
System.out.println(s.length);
System.out.println(p.length);
int [] vs= new int[26];//用数组来创建两个哈希表;
int [] vp= new int[26];
//主要的内容;
for(char c:p)//遍历p字符串数组;结果存入到vp中;存入的是数字;
vp[c-'a']++;
System.out.println("vp.length::"+vp.length);
for(int i=0;i<vp.length;i++){
System.out.print(i+":"+vp[i]+" ");
}
//主要的算法内容;
for(int i = 0; i < s.length; i++)//遍历给定的要查找的字符串;
{
if(i>=p.length)//如果说此时的下标大于滑动窗口的长度;
vs[s[i-p.length]-'a']--;
vs[s[i]-'a']++;//将当前的字符加入到滑动窗口中;
if(Arrays.equals(vs,vp))//注意这里只比较数组的内容并不需要比较顺序;Java不支持直接vs==vp
result.add(i-p.length+1);
}
return result;
}
public static void main(String[] args) {
String s1 = "abab";
String p1 = "ab";
List<Integer> result = new ArrayList<Integer>();
findAnagrams(s1,p1,result);
// System.out.println(1);
//System.out.println(result.size());
for(int i=0;i<result.size();i++){
//System.out.println(1);
System.out.println(result.get(i));
}
}
}

本文详细解析了LeetCode第438题“找到字符串中所有字母异位词”的算法实现,通过使用哈希表和滑动窗口技术,高效地在目标字符串中查找与模式串相匹配的所有异位词的位置。

1794

被折叠的 条评论
为什么被折叠?



