目前有一个小项目我正在摆弄,这是一个倒计时类型的游戏(电视节目)。 目前,该程序允许用户选择一个元音辅音或到9个字母的限制,然后将它们要求输入他们能想到用这些由9个字母的最长的单词。如果搜索字符串数组包含数组,如果字符的
我有作为,我通过使用用户输入的字符串匹配尝试的结果来检查,如果他们进入这个词是一个有效的搜索词的字典大文本文件。我的问题是,我想,然后搜索我的字典由九个字母的最长的单词,但我不能似乎找到一个方法来实现它。
到目前为止,我已经尝试将每个单词放入一个数组中,并通过每个元素进行搜索以检查它是否包含字母,但是如果可以由9个字母组成的最长单词是8个字母字。有任何想法吗? 目前我有这个(这是表单提交按钮下,不提供代码或提抱歉它是一个Windows窗体应用程序):
StreamReader textFile = new StreamReader("C:/Eclipse/Personal Projects/Local_Projects/Projects/CountDown/WindowsFormsApplication1/wordlist.txt");
int counter1 = 0;
String letterlist = (txtLetter1.Text + txtLetter2.Text + txtLetter3.Text + txtLetter4.Text + txtLetter5.Text + txtLetter6.Text + txtLetter7.Text + txtLetter8.Text + txtLetter9.Text); // stores the letters into a string
char[] letters = letterlist.ToCharArray(); // reads the letters into a char array
string[] line = File.ReadAllLines("C:/Eclipse/Personal Projects/Local_Projects/Projects/CountDown/WindowsFormsApplication1/wordlist.txt"); // reads every line in the word file into a string array (there is a new word on everyline, and theres 144k words, i assume this will be a big performance hit but i've never done anything like this before so im not sure ?)
line.Any(x => line.Contains(x)); // just playing with linq, i've no idea what im doing though as i've never used before
for (int i = 0; i < line.Length; i++)// a loop that loops for every word in the string array
// if (line.Contains(letters)) //checks if a word contains the letters in the char array(this is where it gets hazy if i went this way, i'd planned on only using words witha letter length > 4, adding any words found to another text file and either finding the longest word then in this text file or keeping a running longest word i.e. while looping i find a word with 7 letters, this is now the longest word, i then go to the next word and it has 8 of our letters, i now set the longest word to this)
counter1++;
if (counter1 > 4)
txtLongest.Text + =行+ Environment.NewLine;
麦克的代码:using System.Collections.Generic
using System;
;使用System.Linq的 ;
类节目
static void Main(string[] args) {
var letters = args[0];
var wordList = new List<string> { "abcbca", "bca", "def" }; // dictionary
var results = from string word in wordList // makes every word in dictionary into a seperate string
where IsValidAnswer(word, letters) // calls isvalid method
orderby word.Length descending // sorts the word with most letters to top
select word; // selects that word
foreach (var result in results) {
Console.WriteLine(result); // outputs the word
}
}
private static bool IsValidAnswer(string word, string letters) {
foreach (var letter in word) {
if (letters.IndexOf(letter) == -1) { // checks if theres letters in the word
return false;
}
letters = letters.Remove(letters.IndexOf(letter), 1);
}
return true;
}
}
对于Adrian的观点,它有助于发布您编写的代码,因此我们知道从哪里开始。 – 2013-02-21 16:53:04
如果我理解正确,这听起来像是一个NP难题。有(可能)没有这样做的简单方法。看看[coin-problem](http://en.wikipedia.org/wiki/Coin_problem) – Automatico 2013-02-21 16:56:18
你可以重复使用字符吗?如果你选择a,b,c,d,e,f,g,h,i - 你能拼写'egg'吗?还是你应该选择'g'两次? – amit 2013-02-21 17:00:17