cs: add “1657. Determine if Two Strings Are Close”

Signed-off-by: Matej Focko <mfocko@redhat.com>
This commit is contained in:
Matej Focko 2024-01-07 13:49:00 +01:00
parent 34acc09b98
commit 8171cd6289
Signed by: mfocko
GPG key ID: 7C47D46246790496

View file

@ -0,0 +1,33 @@
public class Solution {
private static List<int> Freqs(string word) {
var f = new List<int>(Enumerable.Repeat(0, 26));
foreach (var c in word) {
++f[c - 'a'];
}
return f;
}
private static int Mask(List<int> f) {
var m = 0;
foreach (var c in f) {
m = (m << 1) | (c > 0 ? 1 : 0);
}
return m;
}
public bool CloseStrings(string word1, string word2) {
var f1 = Freqs(word1);
var m1 = Mask(f1);
f1.Sort();
var f2 = Freqs(word2);
var m2 = Mask(f2);
f2.Sort();
return m1 == m2 && f1.SequenceEqual(f2);
}
}