找到单词的最短连续子序列 [英] Find the shortest continuous subsequence of words

查看:76
本文介绍了找到单词的最短连续子序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,



请给我一系列单词S和一系列单词T.如何找到单词中最短的连续子序列S使得T中的单词按顺序出现(在c#中)

谢谢。



我目前的源代码是:



Hello,

Please if I am given a sequence of words S, and a sequence of words T. How do I find the shortest continuous subsequence of words in S such that the words in T appear in that order (in c#)
Thank you.

My current source code is:

public  bool ContainsSubequence<t>(this IEnumerable<t>parent, IEnumerable<t>target)
   {
       bool foundOneMatch = false;
       var enumeratedTarget = target.ToList();
       int enumPos = 0;

       using (IEnumerator<t>parentEnum = parent.GetEnumerator())
       {
           while (parentEnum.MoveNext())
           {
               if (enumeratedTarget[enumPos].Equals(parentEnum.Current))
               {
                   // Match, so move the target enum forward
                   foundOneMatch = true;
                   if (enumPos == enumeratedTarget.Count - 1)
                   {
                       // We went through the entire target, so we have a match
                       return true;
                   }

                   enumPos++;
               }
               else if (foundOneMatch)
               {
                   foundOneMatch = false;
                   enumPos = 0;

                   if (enumeratedTarget[enumPos].Equals(parentEnum.Current))
                   {
                       foundOneMatch = true;
                       enumPos++;
                   }
               }
           }

           return false;
       }
   }





但它无效



but its not working

推荐答案

我认为一种相当强力的方法会在这里取得成功。

这是在 T 项目(find) > S ,然后在下面的单词中找到第一个出现的第二个 T 项目(他们)等等,直到找到最后一个 T 项目。将其标记为最佳当前消息。继续这样的过程,适当地更新最佳当前解决方案。最终最佳当前解决方案(可能是空的)就是你的结果。
I suppose a rather 'brute force' approach would succeed here.
That is find the first occurrence of the first T item ("find") in S, then find the first occurrence of the second T item ("them") in the following words and so on, until last T item is found. Mark it as 'best current soution'. Continue such a process, updating 'best current solution' appropriately. Eventually the 'best current solution' (possibly empty) is your result.


我们不做你的作业:它是有原因的。它就是为了让你思考你被告知的事情,并试着理解它。它也在那里,以便您的导师可以识别您身体虚弱的区域,并将更多的注意力集中在补救措施上。



亲自尝试,你可能会发现它不是和你想的一样困难!



如果遇到具体问题,请询问相关问题,我们会尽力提供帮助。但我们不打算为你做这一切!
We do not do your homework: it is set for a reason. It is there so that you think about what you have been told, and try to understand it. It is also there so that your tutor can identify areas where you are weak, and focus more attention on remedial action.

Try it yourself, you may find it is not as difficult as you think!

If you meet a specific problem, then please ask about that and we will do our best to help. But we aren't going to do it all for you!


这篇关于找到单词的最短连续子序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆