package LeetCode_567
/**
* 567. Permutation in String
* https://leetcode.com/problems/permutation-in-string/description/
*
* 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").
* */
class Solution {
/*
* Solution: Sliding Window + Array;
* Array save the frequency of each latter of s1, and keep tracking s2 to calculate the frequency of each latter of s2;
* Time complexity:O(l1+l2), Space complexity:O(1)
* */
fun checkInclusion(s1: String, s2: String): Boolean {
val s1Array = IntArray(26)
val s2Array = IntArray(26)
for (c in s1) {
s1Array[c - 'a']++
}
val s1Length = s1.length
for (i in s2.indices) {
//when i larger than s1Length, keep tracking to compare with remove the first latter
if (i - s1Length >= 0) {
s2Array[s2[i - s1Length] - 'a']--
}
s2Array[s2[i] - 'a']++
if (s1Array contentEquals s2Array) {
return true
}
}
return false
}
}