首页 > 解决方案 > 有谁知道如何检查一个排列是否在英语词典中

问题描述

我的代码在这里列出了字符串的所有排列

{
    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 上打印英文单词?谢谢你‎‏‎ ‎‏‎ ‎‏‎ ‎‏‎ ‎‏‎

标签: c#visual-studiowinformspermutation

解决方案


你需要在你的项目中添加一个带有英语词汇的文本文件(如果你搜索它们,有几个这样的开源列表,例如在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
}

推荐阅读