Permutation in String: 6 years later...
Wow, can't believe I've been trying to solve this problem for years, to be precise 6 years. Key is to not use a Hashtable (too expensive for this case) but rather a 26-len array. That brings the complexity to 26x10^4, totally doable. Code is down below, cheers, ACC.
Permutation in String - LeetCode
567. Permutation in String
Medium
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
ands2
consist of lowercase English letters.
Accepted
710,484
Submissions
1,608,202
public bool CheckInclusion(string s1, string s2) { int[] c1 = new int[26]; foreach (char c in s1) c1[(int)(c - 'a')]++; int[] c2 = new int[26]; for (int i = 0; i < s2.Length; i++) { if (i < s1.Length) c2[(int)(s2[i] - 'a')]++; else { if (CompareInclusion(c1, c2)) return true; c2[(int)(s2[i] - 'a')]++; c2[(int)(s2[i - s1.Length] - 'a')]--; } } return CompareInclusion(c1, c2); } private bool CompareInclusion(int[] c1, int[] c2) { for (int i = 0; i < c1.Length; i++) if (c1[i] != c2[i]) return false; return true; }
Comments
Post a Comment