zoukankan      html  css  js  c++  java
  • [leetcode-438-Find All Anagrams in a String]

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

    思路:

    用一个滑动窗口,随时判断窗口里面的字符是否与p字符串相符合anagram。

    vector<int> findAnagrams(string s, string p) {
            vector<int> pv(256,0), sv(256,0), res;
            if(s.size() < p.size())
               return res;
            for(int i = 0; i < p.size(); ++i)
            {
                ++pv[p[i]];
                ++sv[s[i]];
            }
            if(pv == sv)
               res.push_back(0);
            for(int i = p.size(); i < s.size(); ++i)
            {
                ++sv[s[i]];
                --sv[s[i-p.size()]];
                if(pv == sv)
                   res.push_back(i-p.size()+1);
            }
            return res;
        }

    参考:

    https://discuss.leetcode.com/topic/64390/c-o-n-sliding-window-concise-solution-with-explanation

  • 相关阅读:
    9 Fizz Buzz 问题
    2 尾部的零
    1 A+B问题
    递归
    互斥同步
    垃圾收集器与内存分配策略---垃圾收集算法
    10.矩形覆盖
    9.变态跳台阶
    8.跳台阶
    9.path Sum III(路径和 III)
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/6936981.html
Copyright © 2011-2022 走看看