如何查找单词是否包含模式字符的排列?

时间:2014-10-18 06:24:17

标签: regex string algorithm

我有一个长度< = 100的模式,和一组单词< 20我想找到包含模式字符排列的单词数量,例如,如果模式是" cat&#34 ;这套词是" ttact tract tattc"输出应该是两个。 ttact:匹配,因为它包含tac tract:匹配因为它包含act tattc:剂量不匹配

这是代码

public static void main(String[] args) {
String pattern="cat";
 char []p=pattern.toCharArray();
 Arrays.sort(p);
String sen="ttact tract tattc";
for (char c : p)
    System.out.println(c);
String [] words=sen.split(" ");

if (pattern.length()==1)
{
    String [] len=sen.split(pattern);
}
else 
{
    int count=0;
for (String word :words)
{
    String found="";

  for (int i=0;i<word.length();i++)
  {
      if (pattern.indexOf(word.charAt(i))!=-1)
      {
        found+=word.charAt(i);
        if (found.length()==pattern.length())
        {
            char f [] = found.toCharArray();
            Arrays.sort(f);
            if (Arrays.equals(f, p))
            {
            count++;
            found="";
            }
            else
                found="";

        }


      }
      else
        {
            found="";
        }


  }


}
 System.out.println(count);


}}}

2 个答案:

答案 0 :(得分:2)

模式中字符的任何排列必须与模式具有完全相同的长度。您可以调查与模式长度相同的单词的所有子字符串,并检查每个子字符串(如果它是模式的排列)(例如,通过对字母进行排序)。对每个单词重复并计算匹配。

答案 1 :(得分:0)

您可以将解决方案分为两个步骤

1-找到你所拥有的单词的所有排列(cat =&gt; cat,cta,act,atc,tca,tac) 你可以参考这个Finding all permutation of words in a sentence

2-找到您所拥有的字符串中每个结果的出现次数 你可以使用linq,例如

var permutations=PermuteWords(input); // this function you should get it from the link above
var words = sen.Split(' '); //you will split your sentence into array of words
var count=0; // this variable will store all the occurrences and if you want to get the words that occurred, you can use list to store them
foreach(var p in permutations)
{
     count+=(from w in words
             where permutations.Contains(w)
             select w).Count();
}

希望这会对你有所帮助

如果您还有任何疑问,请随时提及,如果有帮助,请将其标记为答案。