【问题标题】:An optimized algorithm or a method to find a multi word string (keywords) in a sentence (that has multi words)?在句子(具有多个单词)中查找多单词字符串(关键字)的优化算法或方法?
【发布时间】:2016-11-30 05:28:30
【问题描述】:

我有一个字符串(你好,这是一个字符串),我想在其中搜索一个关键字。我该怎么办?

我必须在一个字符串中搜索以下关键字:

字符串:你好,这是一个字符串。

关键词: 1.你好这个(应该匹配) 2.你好(应该匹配) 3.hello t(应该不匹配) 4. 你好这个我(应该不匹配)

请提出优化的方法来构建存储和搜索的数据结构?

【问题讨论】:

    标签: c string data-structures pattern-matching string-algorithm


    【解决方案1】:

    如果你的条件是只匹配完整的单词而不是它的一半,当字符不匹配/字符串结束时使用 break 并检查主字符串的 index+1 是否是空格或逗号或句号或任何根据您的需要。如果是,那么您的字符串是完全匹配的,否则它将是一个字符。

    【讨论】:

      【解决方案2】:

      如果您在字符串中搜索完整的单词。在关键字后添加空格并按照以下步骤操作。

      char * string = "Hello this is a string";
      char * keyword = "Hello t ";
      
      if(strstr(string,keyword) != NULL)
          printf("Matched");
      else
          printf("Not Matched");
      

      【讨论】:

      • 它不能那样工作。让我解释一下我真正需要什么。我有一个包含 1000 个字符串的文件(第一个问题是如何存储/构建数据结构以便快速搜索),即“你好,这是字符串 1”,“你好,这是字符串 2”。我想搜索一个关键字,即(你好,这是字符串 3)每秒 100 个请求。如果我对每个请求都执行 strstr,您的解决方案将显着降低应用程序的性能。如果您有任何方法,请分享或讨论。另外,如果我有一个字符串:“你好”&我想搜索关键字="你好"。你的解决方案会失败。​​
      • 在这种情况下..你可以使用trie数据结构并将字符串的每个单词作为一个节点插入到trie中。
      • 我不能使用 trie 数据结构。由于关键字和字符串的长度不固定。虽然 trie 在 O(n) 中搜索,但按照上述情况;它将显着增加搜索时间。另一个问题是,如果我有 100 个文件,那么我将不得不维护 100 个 trie,这从常驻内存的角度来看是不好的。我希望你理解挑战。
      • @Gurpreet 我不明白“如果我对每个请求都执行 strstr,您的解决方案将显着降低应用程序的性能。”如果不对每一个请求都做一些操作,那么如何计算每一个请求的结果呢?你想要一个结果缓存机制来缓存你以前的结果吗??
      • @Gurpreet 请在您的评论中使用您更详细的描述来编辑问题。
      【解决方案3】:

      后缀树可以是一个选项。请阅读https://en.wikipedia.org/wiki/Suffix_tree

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 2020-05-30
        • 2021-02-18
        • 1970-01-01
        相关资源
        最近更新 更多