2024-10-05 Daily Challenge

Today I have done leetcode's October LeetCoding Challenge with cpp.

October LeetCoding Challenge 5

Description

Permutation in String

Given two strings s1 and s2, return true if s2 contains a permutation of s1, or false otherwise.

In other words, return true if one of s1's permutations is the substring of s2.

 

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

 

Constraints:

  • 1 <= s1.length, s2.length <= 104
  • s1 and s2 consist of lowercase English letters.

Solution

class Solution {
public:
  bool checkInclusion(string s1, string s2) {
    if(s1.length() > s2.length()) return false;
    map<char, int> count;
    for(auto c : s1) {
      count[c] += 1;
    }
    int len1 = s1.length();
    for(int i = 0; i < len1; ++i) {
      count[s2[i]] -= 1;
      if(!count[s2[i]]) count.erase(s2[i]);
    }
    if(count.empty()) return true;
    for(int i = s1.length(); i < s2.length(); ++i) {
      count[s2[i - len1]] += 1;
      if(!count[s2[i - len1]]) count.erase(s2[i - len1]);
      count[s2[i]] -= 1;
      if(!count[s2[i]]) count.erase(s2[i]);
      if(count.empty()) return true;
    }
    return false;
  }
};