From d2b55bc17b5aef1409977840582a4cfdac848532 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Sat, 5 Oct 2024 23:35:43 +0200 Subject: [PATCH] =?UTF-8?q?cs:=20add=20=C2=AB567.=20Permutation=20in=20Str?= =?UTF-8?q?ing=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- cs/permutation-in-string.cs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 cs/permutation-in-string.cs diff --git a/cs/permutation-in-string.cs b/cs/permutation-in-string.cs new file mode 100644 index 0000000..9c79542 --- /dev/null +++ b/cs/permutation-in-string.cs @@ -0,0 +1,36 @@ +public class Solution { + private int[] GetFreqs(string s, int begin, int end) { + var freqs = new int[26]; + + for (int i = begin; i < end; ++i) { + ++freqs[s[i] - 'a']; + } + + return freqs; + } + private int[] GetFreqs(string s) => GetFreqs(s, 0, s.Length); + + public bool CheckInclusion(string s1, string s2) { + if (s2.Length < s1.Length) { + return false; + } + + var expected = GetFreqs(s1); + + var running = GetFreqs(s2, 0, s1.Length); + if (Enumerable.SequenceEqual(running, expected)) { + return true; + } + + for (int i = s1.Length; i < s2.Length; ++i) { + --running[s2[i - s1.Length] - 'a']; + ++running[s2[i] - 'a']; + + if (Enumerable.SequenceEqual(running, expected)) { + return true; + } + } + + return false; + } +}