LeetCode 438 Find All Anagrams in a String
2017-09-19 10:10
417 查看
题目:
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:
Example 2:
题目链接<
4000
/a>
题意:
给一个字符串s(未知是否为空),和一个模版字符串p(不为空),要求找到以模版字符串p的字母排列组合后形成的字符串在s中的序的集合(vector)。
我们可以统计模版字符串中各个字母出现的次数,放在数组model中,之后从0开始遍历s,将从i到i+p.length()-1的字母出现次数存放在数组v中,每次维护数组v,并比较v和model是否相同,相同则将当前i加入到ans中即可。
代码如下:
class Solution {
public:
bool judge(int a[], int b[]) {
for (char c = 'a'; c <= 'z'; c ++) {
if (a[c] != b[c]) {
return false;
}
}
for (char c = 'A'; c <= 'Z'; c ++) {
if (a[c] != b[c]) {
return false;
}
}
return true;
}
vector<int> findAnagrams(string s, string p) {
if (s.length() < p.length())
return {};
int model[200] = {0}, v[200] = {0}, len = p.length();
for (int i = 0; i < len; i ++) {
model[p[i]] ++;
v[s[i]] ++;
}
vector<int> ans;
if (judge(model, v)) {
ans.push_back(0);
}
for (int i = 1; i+len-1 < s.length(); i ++) {
v[s[i+len-1]] ++;
v[s[i-1]] --;
if (judge(model, v)) {
ans.push_back(i);
}
}
return ans;
}
};
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".
题目链接<
4000
/a>
题意:
给一个字符串s(未知是否为空),和一个模版字符串p(不为空),要求找到以模版字符串p的字母排列组合后形成的字符串在s中的序的集合(vector)。
我们可以统计模版字符串中各个字母出现的次数,放在数组model中,之后从0开始遍历s,将从i到i+p.length()-1的字母出现次数存放在数组v中,每次维护数组v,并比较v和model是否相同,相同则将当前i加入到ans中即可。
代码如下:
class Solution {
public:
bool judge(int a[], int b[]) {
for (char c = 'a'; c <= 'z'; c ++) {
if (a[c] != b[c]) {
return false;
}
}
for (char c = 'A'; c <= 'Z'; c ++) {
if (a[c] != b[c]) {
return false;
}
}
return true;
}
vector<int> findAnagrams(string s, string p) {
if (s.length() < p.length())
return {};
int model[200] = {0}, v[200] = {0}, len = p.length();
for (int i = 0; i < len; i ++) {
model[p[i]] ++;
v[s[i]] ++;
}
vector<int> ans;
if (judge(model, v)) {
ans.push_back(0);
}
for (int i = 1; i+len-1 < s.length(); i ++) {
v[s[i+len-1]] ++;
v[s[i-1]] --;
if (judge(model, v)) {
ans.push_back(i);
}
}
return ans;
}
};
相关文章推荐
- [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
- 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[easy]---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: Python]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
- 438 Find All Anagrams in a String 找出字符串中所有的变位词
- 438. Find All Anagrams in a String
- 438. Find All Anagrams in a String