-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAnagram.cs
59 lines (57 loc) · 1.38 KB
/
Anagram.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using BenchmarkDotNet.Attributes;
public class Anagram
{
public Anagram(string baseWord)
{
_BaseWord = baseWord.ToLower();
}
public string[] FindAnagrams(string[] potentialMatches)
=> potentialMatches
.Where(x => x.Length == _BaseWord.Length && x != _BaseWord)
.Where(x => IsAnagram(x.ToLower()))
.ToArray();
private bool IsAnagram(string text)
=> string.Equals(string.Concat(text.OrderBy(x => x)), string.Concat(_BaseWord.OrderBy(x => x)));
private readonly string _BaseWord;
}
[MemoryDiagnoser]
public class AnagramTests
{
[Benchmark]
public void E1Anagram()
{
var candidates = new[]
{
"cashregister",
"Carthorse",
"radishes"
};
var sut = new Anagram("orchestra");
var model = sut.FindAnagrams(candidates);
}
[Benchmark]
public void E2Anagram()
{
var candidates = new[]
{
"enlists",
"google",
"inlets",
"banana"
};
var sut = new Anagram("listen");
var model = sut.FindAnagrams(candidates);
}
[Benchmark]
public void E3Anagram()
{
var candidates = new[]
{
"LISTEN",
"Silent"
};
var sut = new Anagram("LISTEN");
var model = sut.FindAnagrams(candidates);
}
}