在C#中的字符串列表中搜索混乱的字符串

时间:2010-11-24 17:19:31

标签: c# .net string search

我正在使用.NET2.0
我想在字符串列表中搜索混乱的字符串

string[] wordList = new string[] { "java", "csharp", "fortran", "cobol", "pascal", "perl", "flash" };
string findText = "spclaa"; 

// do stuff 

我希望结果是“pascal” 如果没有找到“抱歉,没找到”

更新

  • 这不是作业
  • 列表大约有1000个字,因此不容易对每个单词进行排序

5 个答案:

答案 0 :(得分:4)

嗯,一种方法是:

  1. 创建数组的副本
  2. 按字母顺序对每个字符串进行排序
  3. 按字母顺序对搜索字词进行排序
  4. 在复制的数组中查找与排序的搜索词匹配的元素的索引
  5. 如果匹配,则返回原始(未排序)数组中的相应元素。
  6. 如果不匹配,请继续搜索。
  7. 值得注意的是,两个单词可能具有相同的字符内容但却不相等。例如,“neo”和“one”具有相同的字符,但显然不是同一个字。

    <强>更新

    正如保罗建议的那样,如果您只对与搜索词具有相同字符数的字符串进行排序,则效果会更好。

答案 1 :(得分:2)

闻起来像家庭作业

对findText中的字符进行排序。 对wordList中每个单词的字符进行排序并创建一个新列表。 将排序的findText与每个排序的单词进行比较。 如果得到匹配项,请在原始wordList中的相同索引处查找单词。

(您可以在比较它之前对wordList中的单词进行排序)

编辑:如果你真的不想对它们进行排序,

计算findText中每个字母的数量。

  • 通过wordList
  • 迭代
  • 对于每个单词,
    • 如果它与wordList的长度相同
    • 复制findtext的频率表
    • 遍历wordList
    • 中的单词
    • 对于找到的每个字符,如果不是零,则递减频率表中的数字。
    • 如果您匹配所有字母并最终得到全部为零的匹配

答案 2 :(得分:1)

一种方法可能是对每个字符串中的字符和比较字符串进行排序,并以这种方式进行比较。

java becomes aajv
csharp becomes achprs
pascal becomes aaclps
scplaa becomes aaclps

比较排序的字符串是否相等,如果没有匹配则返回未找到。

答案 3 :(得分:0)

1.过滤数组列表,如搜索字符串长度等于数组列表元素

2.比较数组列表元素中的每个字符。如果找到增量计数并删除该字符数组列表元素。

3.如果count等于搜索字符串而不是print数组元素,否则找不到元素

答案 4 :(得分:0)

  1. 列出长度等于给定字符串长度的字符串。
  2. 从这些已过滤的列表中,检查每个字符串的ASCII值与给定字符串的总和。
  3. 第三个也是最后一个现在匹配已过滤列表中的字符,您将获得混乱的字符串。