【问题标题】:searching a jumbled string in a list of strings in C#在 C# 中的字符串列表中搜索混乱的字符串
【发布时间】:2010-11-24 17:19:31
【问题描述】:

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

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

// do stuff 

我希望结果是 "pascal" 如果未找到,请给出“抱歉,未找到”

更新:

  • 这不是家庭作业
  • 列表大约有 1000 个单词,因此很难对每个单词进行排序

【问题讨论】:

  • 如果这不是家庭作业,我不知道是什么......
  • 您想要部分匹配还是完全匹配?重复匹配的可能性如何?
  • 如果您寻找有关拼字游戏求解器工作原理的示例,可以使用字典中的单词源、检查长度等以类似的方式完成。
  • @Joel,完全匹配,如果重复所有单词
  • 1000 字不算什么。去对它们进行排序:)

标签: c# .net string search


【解决方案1】:

嗯,一种方法是:

  1. 创建数组的副本
  2. 按字母顺序对每个字符串进行排序
  3. 按字母顺序对搜索词进行排序
  4. 在复制的数组中查找与排序后的搜索词匹配的元素的索引
  5. 如果它们匹配,则从原始(未排序的)数组中返回相应的元素。
  6. 如果不匹配,请继续搜索。

值得注意的是,两个单词可能具有相同的字符内容,但并不相等。例如,“neo”和“one”有相同的字符,但显然不是同一个词。

更新

正如 Paul 所建议的,如果您只对与搜索词具有相同字符数的字符串进行排序,这将表现得更好。

【讨论】:

  • 我有 1000 个单词的列表,那么如何对每个字符串进行排序。
  • 和你对一个字符串进行排序一样,只有 1000 次(换句话说,为什么有 1000 个字符串会改变什么?)
  • @Paul 是的。看来我们是同时发的。
  • "值得注意的是,有可能两个词有相同的字符内容,但并不相等。例如,“neo”和“one”有相同的字符,但显然不一样单词。”。好吧,实际上这不是问题,因为原始字符串是混乱的,因此不可能知道程序查找的单词是否正确。所以说它们不相等是不正确的,在这种搜索中它们是相等的。
  • @AS-CII 是的,显然。这就是为什么它“值得注意”而不包含在算法中的原因。
【解决方案2】:

闻起来像作业

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

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

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

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

  • 遍历wordList
  • 对于每个单词,
    • 如果与wordList长度相同
    • 复制 findtext 的频率表
    • 遍历 wordList 中的单词
    • 对于找到的每个字符,如果不为零,则减少频率表中的数字。
    • 如果您匹配所有字母并以全零结尾,则您有匹配项

【讨论】:

    【解决方案3】:

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

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

    比较排序后的字符串是否相等,如果没有匹配则返回 not found。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:
        1. 列出长度等于给定字符串长度的那些字符串。
        2. 从这些过滤列表中,检查每个字符串与给定字符串的 ASCII 值之和。
        3. 现在第三个也是最后一个匹配过滤列表中的字符,您将得到混乱的字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-12
          • 1970-01-01
          • 1970-01-01
          • 2012-02-10
          • 1970-01-01
          • 2020-06-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多