Vorausgesetzt, dass Sie eine entsprechenden englischen Worten Sammlung, zum Beispiel in ihm sortiert ("flea"
=>"aefl"
, "sad"
=>"ads"
usw.)
private static HashSet<String> s_Words = new HashSet<String>() {
"abacus",
//...
"flea",
"fleas",
//...
"sad",
"sea",
// ...
"zoom",
};
Sie es in bequemer aggregierte Wörterbuch mit Schlüssel ist eine erste Zeichenfolge mit allen Buchstaben umwandeln kann. Wenn zwei oder mehr Wörter, die gleichen Schlüssel haben, sollten sie sein in einer Sammlung zusammengefasst, sagen wir, ein Array:
"ale", "lea" => "ael" : ["ale", "lea"]
können Sie implementieren ein solches Wörterbuch über Linq:
private static Dictionary<String, String[]> s_Dict = s_Words
.Select(word => new {
Key = String.Concat(word.OrderBy(c => c)),
Value = word})
.GroupBy(item => item.Key, item => item.Value)
.ToDictionary(chunk => chunk.Key, chunk => chunk.ToArray());
dann wird eine Zeichenfolge
gegeben
String Input = "sasdfle"
alles, was Sie tun müssen, ist zu Art es und lassen nur 256
(2 ** (length + 1) == 256
) Kombinationen einschließlich und excuding jeden Buchstaben:
string source = String.Concat(Input.OrderBy(c => c));
// all combinations of the set with empty one excluded, see
// http://stackoverflow.com/questions/30081908/c-sharp-linq-combinatorics-all-combinations-of-a-set-without-the-empty-set/30082360#30082360
var result = Enumerable
.Range(1, (1 << source.Length) - 1)
.Select(index => string.Concat(source.Where((item, idx) => ((1 << idx) & index) != 0)))
.SelectMany(key => {
String[] words;
if (s_Dict.TryGetValue(key, out words))
return words;
else
return new String[0]; })
.Distinct() // some words can be built in many ways
.OrderBy(word => word);
//.ToArray(); // if you want to represent words as array
-Test
Console.Write(String.Join(Environment.NewLine, result));
zurück
flea
fleas
sad
sea
können Sie zeigen uns, was Sie auf Ihrem eigenen versucht haben, ..? Es gibt einige Beispiele da draußen, aber ich bin mir sicher, dass andere gerne sehen würden, was du gerade machst, nur um dir eine schnelle Antwort zu geben. Was hast du probiert? – MethodMan
Erwäge, deinen Code über das, was du bisher versucht hast, zu posten – Rahul
Ich habe den Beitrag aktualisiert. Ich hoffe es ist klar. –