我有一个长度< = 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);
}}}
答案 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();
}
希望这会对你有所帮助
如果您还有任何疑问,请随时提及,如果有帮助,请将其标记为答案。