zoukankan      html  css  js  c++  java
  • leetcode 567. Permutation in String

    Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string's permutations is the substring of the second string.

    Example 1:

    Input:s1 = "ab" s2 = "eidbaooo"
    Output:True
    Explanation: s2 contains one permutation of s1 ("ba").
    

    Example 2:

    Input:s1= "ab" s2 = "eidboaoo"
    Output: False
    

    Note:

    1. The input strings only contain lower case letters.
    2. The length of both given strings is in range [1, 10,000].

    维护一下一段区间的字符串就行,有O(26*N)的做法,我这里是用multiset做得,时间复杂度理论上  不必O(26*n)大啊但是跑的慢 可能是判断集合是否相等的时候比较费时间  有时间好好看看multiset源码

    class Solution {
    public:
        bool checkInclusion(string s1, string s2) {
            multiset<char>se1,se2;
            if (s2.size() < s1.size()) return false;
            for (int i = 0; i < s1.size(); ++i) se1.insert(s1[i]),se2.insert(s2[i]);
            if (se2 == se1) return true;
           
            for (int i = s1.size(); i < s2.size(); ++i) {
                char c = s2[i - s1.size()];
                auto x = se2.find(c);
                se2.erase(x);
                se2.insert(s2[i]);
                if (se1 == se2) return true;
            }
            return false;
        }
    };
  • 相关阅读:
    ReentrantLock与synchronized的差别
    读TIJ -1 对象入门
    wikioi 2573 大顶堆与小顶堆并用
    开源 免费 java CMS
    UVA10972
    springboot5
    spring-boot4
    spring-boot3
    spring-boot2
    spring-boot1
  • 原文地址:https://www.cnblogs.com/pk28/p/7416294.html
Copyright © 2011-2022 走看看