leetcode 438. Find All Anagrams in a String 一个简单的移动窗口问题
2017-12-10 10:45
477 查看
Given a string s and a non-empty string p, find all the start indices of p’s anagrams in s.
Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.
The order of output does not matter.
Example 1:
Input:
s: “cbaebabacd” p: “abc”
Output:
[0, 6]
Explanation:
The substring with start index = 0 is “cba”, which is an anagram of “abc”.
The substring with start index = 6 is “bac”, which is an anagram of “abc”.
Example 2:
Input:
s: “abab” p: “ab”
Output:
[0, 1, 2]
Explanation:
The substring with start index = 0 is “ab”, which is an anagram of “ab”.
The substring with start index = 1 is “ba”, which is an anagram of “ab”.
The substring with start index = 2 is “ab”, which is an anagram of “ab”.
题意很简单,就是一个简单的移动窗口的问题,直接遍历比较窗口即可
代码如下:
Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.
The order of output does not matter.
Example 1:
Input:
s: “cbaebabacd” p: “abc”
Output:
[0, 6]
Explanation:
The substring with start index = 0 is “cba”, which is an anagram of “abc”.
The substring with start index = 6 is “bac”, which is an anagram of “abc”.
Example 2:
Input:
s: “abab” p: “ab”
Output:
[0, 1, 2]
Explanation:
The substring with start index = 0 is “ab”, which is an anagram of “ab”.
The substring with start index = 1 is “ba”, which is an anagram of “ab”.
The substring with start index = 2 is “ab”, which is an anagram of “ab”.
题意很简单,就是一个简单的移动窗口的问题,直接遍历比较窗口即可
代码如下:
#include <iostream> #include <vector> #include <map> #include <set> #include <queue> #include <stack> #include <string> #include <climits> #include <algorithm> #include <sstream> #include <functional> #include <bitset> #include <cmath> using namespace std; class Solution { public: vector<int> findAnagrams(string s, string p) { vector<int> res; vector<int> win(26, 0) , tar(26, 0); for (int i = 0; i < p.length(); i++) { win[s[i] - 'a']++; tar[p[i] - 'a']++; } if (win == tar) res.push_back(0); for (int i = p.length(); i < s.length(); i++) { win[s[i] - 'a']++; win[s[i-p.length()] - 'a']--; if (win == tar) res.push_back(i - p.length() + 1); } return res; } };
相关文章推荐
- LeetCode 438 Find All Anagrams in a String
- LeetCode:438. Find All Anagrams in a String
- [leetcode: Python]438. Find All Anagrams in a String
- leetcode 438[easy]---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 找变位子串 解题报告
- Leetcode 438 Find All Anagrams in a String
- LeetCode438 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 (在字符串中找到所有的变位词)
- 438. Find All Anagrams in a String
- 【leetcode】Find All Anagrams in a String
- leetcode刷题系列-Find All Anagrams in a String
- 438. Find All Anagrams in a String