c# - 使用哈希表查找字符串中的字符

标签 c# .net algorithm hashtable

我决定解决在字符串中查找给定字符的问题。我用两种方式解决了它:

第一个(使用哈希表将我们要查找的字符的值保存在 ASCII 中):

static void Hash(string text, char[] charsToFind)
{
    Dictionary<int,char> chars = new Dictionary<int,char>();
    foreach (var letter in charsToFind)
    {
        chars[(int)letter] = letter;
    }

    foreach (var letter in text)
    {
        if (chars.ContainsKey((int)letter))
        {
            if (letter == chars[(int)letter])
            {
                Console.WriteLine("Element found at: {0}, value: {1}", (int)letter, letter);
            }
        }
    }
}

第二种方式(天真):

static void Naive(string text, char[] charsToFind)
{
    foreach (var letter in text)
    {
        foreach (var character in charsToFind)
        {
            if ((int)letter == (int)character)
            {
                Console.WriteLine("Element found at: {0}, value: {1}", (int)letter, letter);
            }
        }
    }
}

一切正常!我想问的问题是哪个更好,是否有更好的解决方案来解决这个问题?

提前致谢!

最佳答案

使用 LINQ:

string input = "abc";
char[] charsToFind = new[] { 'a', '1', 'b' };
IEnumerable<int> ids = charsToFind.Select(ch => input.IndexOf(ch)); // { 0, -1, 1 }

Hashset<T>这是通用哈希表:

HashSet<char> set = new HashSet<char>(input.ToCharArray());
...

关于c# - 使用哈希表查找字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174900/

相关文章:

c# - 以编程方式创建流程图

.net - System.Exception 与 System.SystemException

algorithm - 如果机器有 64 位字,将两个 129 字的数字相乘需要多少位?

c# - 使用 LINQ to SQL 计算运行总计

javascript - Telerik过滤功能

.net - 是否可以等待未知任务完成?

c++ - std::transform 的泛化

algorithm - 通过改变正方形的高度找到从源到目的地的最小路径

c# - 文本框 SelectionStart、SelectionEnd 和插入符号(光标)位置

c# - 如何使用 Razor 语法有条件地输出 HTML?