如何解决使用哈希表在字符串中查找字符
| 我决定解决在字符串中查找给定字符的问题。我用两种方法解决了它: 第一个(使用哈希表将要查找的字符的值保留为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},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());
...
, 第一个是更好的方法,但是第二个对于少数字符可能会更快。
关于第一个的一些评论。
在第一个中,使用字典涉及计算哈希和执行查找的成本。如果您知道字符是ASCII,则可以使用数组来加快查找速度。
而不是执行\'ContainsKey \',而是可以执行\'TryGetValue \'只查找一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。