给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。 来源:力扣(LeetCode) 16 ms 8.6 MB
1. 题目
说明: 字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。 示例 1: 输入: s: "cbaebabacd" p: "abc" 输出: [0, 6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。 起始索引等于 6 的子串是 "bac", 它是 "abc" 的字母异位词。 示例 2: 输入: s: "abab" p: "ab" 输出: [0, 1, 2] 解释: 起始索引等于 0 的子串是 "ab", 它是 "ab" 的字母异位词。 起始索引等于 1 的子串是 "ba", 它是 "ab" 的字母异位词。 起始索引等于 2 的子串是 "ab", 它是 "ab" 的字母异位词。
链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 解题
class Solution { public: vector<int> findAnagrams(string s, string p) { if(s.size() < p.size()) return {}; int pcount[26] = {0}, scount[26] = {0}, i, np = p.size(); for(i = 0; i < np; ++i) { pcount[p[i]-'a']++; scount[s[i]-'a']++; } vector<int> ans; if(eq(pcount, scount)) ans.push_back(0); for(i = np; i < s.size(); ++i) { scount[s[i]-'a']++;//窗口进来的 scount[s[i-np]-'a']--;//出去的 if(eq(pcount, scount)) ans.push_back(i-np+1); } return ans; } bool eq(int *pc, int *sc) { for(int i = 0; i < 26; ++i) if(pc[i] != sc[i]) return false; return true; } };
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算