LeetCode 438. Find All Anagrams in a String

来源:互联网 发布:皮蓬总决赛数据 平均 编辑:程序博客网 时间:2024/05/23 22:56

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".

用HashTable,把p串的字符存储在HashTable中,需要查找p串中是否有某个字符的时候,直接在HashTable中定位到。

class Solution {public:    vector<int> findAnagrams(string s, string p) {        int len1 = s.size();        int len2 = p.size();        vector<int> res;        if(len1 < len2 || !len2) return res;        int m[26];        int i, j, k;        for(i = 0; i < 26; i ++) m[i] = 0;        for(i = 0; i < len2; i ++){            m[p[i] - 'a'] ++;        }        int tmpm[26];        for(i = 0; i <= len1 - len2; i ++){            if(m[s[i] - 'a']){                for(k = 0; k < 26; k ++) tmpm[k] = m[k];                for(j = i; j < len2 + i; j ++){                    if(tmpm[s[j] - 'a']){                        tmpm[s[j] - 'a'] --;                    }else break;                }                if(j == len2 + i) res.push_back(i);            }        }        return res;    }};


0 0
原创粉丝点击