0
点赞
收藏
分享

微信扫一扫

2021.05.12找到字符中所有目标子串的字母异位词

伢赞 2022-03-25 阅读 31

2021.05.12找到字符中所有目标子串的字母异位词

题目描述

给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。

字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。

数据规模和约定

字母异位词指字母相同,但排列不同的字符串。(也可能是本身)
不考虑答案输出的顺序。

思路

  1. 固定滑动窗子的长度,进行滑动
  2. 判断两个子串是否是字母异位词,可以用cnt记录单词数目,再用Arrays.equal进行判断。

代码

	public List<Integer> findAnagrams(String s, String p) {
		List<Integer> res = new ArrayList<Integer>();
		int slen = s.length(), plen = p.length();
		int[] scnt = new int[26], pcnt = new int[26];
		//判断第一个框
		for(int i = 0; i < p.length(); i++) { //遍历chs中元素
			scnt[s.charAt(i)-'a']++;
			pcnt[p.charAt(i)-'a']++;
		}
		if(Arrays.equals(scnt, pcnt)) res.add(0); //判断是否符合
		int left = 0, right = left+plen;
		while(right < slen) {
			//进第right个单词
			scnt[s.charAt(right)-'a']++;
			right++;
			//出第left个单词
			scnt[s.charAt(left)-'a']--;
			left--;
			if(Arrays.equals(scnt, pcnt)) res.add(0);
		}
		
		return res;
    }
举报

相关推荐

0 条评论