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

    要完成的函数:

    vector<int> findAnagrams(string s, string p) 

    说明:

    1、给定一个字符串s和非空字符串p,将p中元素不断交换形成一个新的字符串,如果这个新的字符串在s中能找到匹配的,那么就输出匹配到的开始的位置,直到处理到字符串s结束。

    2、这道题目难道要记住p经过交换可能形成的所有字符串吗,难道再类似于滑动窗口一般不断在s中比较?

    其实不用记住所有字符串,记住p经过交换可能形成的所有字符串其实等价于记住p中所有字母出现的次数。

    所以代码如下:

        vector<int> findAnagrams(string s, string p) 
        {
            vector<int>res;
            vector<int>p1(26,0);
            vector<int>s1(26,0);
            for(int i=0;i<p.size();i++)
            {
                p1[p[i]-'a']++;
            }
            for(int i=0;i<p.size();i++)
            {
                s1[s[i]-'a']++;
            }
            if(s.size()<p.size())
                return res;
            if(p1==s1)
                res.push_back(0);
            for(int i=1;i<=s.size()-p.size();i++)
            {
                s1[s[i-1]-'a']--;//当窗口滑动时,s1中要减去窗口前一位的字母1次
                s1[s[i-1+p.size()]-'a']++;//s1要加上窗口最后新的一维的字母1次
                if(s1==p1)
                    res.push_back(i);
            }
            return res;
        }

    上述代码实测35ms,beats 90.84% of cpp submissions。

     

  • 相关阅读:
    mysql 远程登陆不上
    hdu 5339 Untitled【搜索】
    SqlServer 书目
    passwordauthentication yes
    oracle 11g RAC ocfs2
    Oracle 11g RAC database on ASM, ACFS or OCFS2
    CentOS ips bonding
    Oracle 11g RAC features
    openStack 王者归来之 trivial matters
    openstack windows 2008 img
  • 原文地址:https://www.cnblogs.com/chenjx85/p/8906022.html
Copyright © 2011-2022 走看看