温州网站建设技术托管,那些网站可以做文案兼职,wordpress标题seo,国家网站icp备案查询给定两个字符串 s 和 p#xff0c;找到 s 中所有 p 的 异位词 的子串#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串#xff08;包括相同的字符串#xff09;。 示例 1:
输入: s cbaebabacd, p …
给定两个字符串 s 和 p找到 s 中所有 p 的 异位词 的子串返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串包括相同的字符串。 示例 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 的异位词。提示:
1 s.length, p.length 3 * 104s 和 p 仅包含小写字母 vectorint findAnagrams(string s, string p) { vectorintret; vectorintneedVec(26, 0); vectorintcountVec(26, 0); vectorinttmpVec(26, 0); for (int i 0; ip.length(); i) { needVec[int(p[i]-a)]; } int left 0; int right 0; while (rights.length()) { while (rights.length() needVec[int(s[right] - a)] 0) { right; } if (right s.length()) { break; } left right; countVec tmpVec; while (rights.length() needVec[int(s[right] - a)] 0) { countVec[int(s[right] - a)]; if (needVec[int(s[right] - a)] countVec[int(s[right] - a)]) { while (left right needVec[int(s[right] - a)] countVec[int(s[right] - a)]) { countVec[int(s[left] - a)]--; left; } } if (right - left 1 p.length()) { ret.push_back(left); } right; } } return ret;
}