c# - 有谁知道如何检查一个排列是否在英语词典中
问题描述
我的代码在这里列出了字符串的所有排列
{
public partial class Form1 : Form
{
private int n;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
string scrambledWord = textBox1.Text;
if (e.KeyCode == Keys.Enter)
{
label4.Text = "";
char[] arr = scrambledWord.ToCharArray();
GetPer(arr);
}
}
public void GetPer(char[] list)
{
int x = list.Length - 1;
GetPer(list, 0, x);
}
private void GetPer(char[] list, int k, int m)
{
if (k == m)
{
Console.WriteLine(list);
var text = new string(list);
label4.Text = label4.Text + text + Environment.NewLine;
}
else
for (int i = k; i <= m; i++)
{
Swap(ref list[k], ref list[i]);
GetPer(list, k + 1, m);
Swap(ref list[k], ref list[i]);
}
}
private void Swap(ref char a, ref char b)
{
if (a == b) return;
var temp = a;
a = b;
b = temp;
}
private void label1_TextChanged(object sender, EventArgs e)
{
label4.Height = label4.Height + 10;
}
}
}
有谁知道如何检查任何排列是否是英文单词并且代码在 Visual Studio 上打印英文单词?谢谢你
解决方案
你需要在你的项目中添加一个带有英语词汇的文本文件(如果你搜索它们,有几个这样的开源列表,例如在GitHub 上)。将此单词文件作为内容文件添加到您的项目中。然后阅读单词列表并搜索其中的排列。因为那是很多单词,如果您将单词存储在其中,您可以提高应用程序的速度,Hashset<string>
因为这样您就可以在很短的O(1)
时间内检查排列是否存在。
以下是解决方案的伪代码:
var wordHashSet = new HashSet<string>();
var words = File.ReadAllLines("words.txt");
foreach (var word in words)
{
wordHashSet.Add(word.ToUpperInvariant());
}
// checking for permutation
if (wordHashSet.Contains(permutation.ToUpperInvariant()))
{
// the permutation is an english word
}
推荐阅读
- oracle - 如何在oracle中找到导致死锁的当前SQL语句?
- jquery - 找到选定的选项并将其转移到隐藏字段
- cython - 类的 Cython 静态类型
- python - AttributeError:没有这样的孩子:-Lxml 对象化
- opencv - 使用 OpenCV 以 15mp 捕获图像 1920x1080
- regex - 为什么标题引用时 NSRegularExpression 不匹配?
- r - 如何修改 R 中的预定义函数?
- python-3.x - python 美丽汤中的问题
- c++ - 在 GDB 中指定浮点精度
- mysql - 如何有效地从 (s,d) 对表中过滤 s 和 d 的重复值,只保留最小的 (s,d) 对