Permutation in String

Question

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:

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

Tags

  • String
  • Hash Table

Thought

Use counter to count the frequency to check the permutation.

Code

from collections import Counter

class Solution(object):
    def checkInclusion(self, s1, s2):
        """
        :type s1: str
        :type s2: str
        :rtype: bool
        """
        counter1 = Counter(s1)
        counter2 = Counter(s2[:len(s1) - 1])
        for i in xrange(len(s1) - 1, len(s2)):
            counter2[s2[i]] += 1
            if counter1 == counter2:
                return True
            counter2[s2[i - len(s1) + 1]] -= 1
            if counter2[s2[i - len(s1) + 1]] == 0:
                del counter2[s2[i - len(s1) + 1]]
        return counter1 == counter2

results matching ""

    No results matching ""