2014-10-18 35 views
0

我有一個模式的長度< = 100,和一組單詞< 20我想找到包含模式字符的排列的單詞的數量,例如,如果模式是「貓」,而單詞的集合是「 ttact tract tattc「的輸出應該是兩個。 ttact:相匹配,因爲它包含TAC 道:火柴,因爲它包含的行爲 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); 


}}} 
+1

請在描述中更加精確地描述你想達到的目標。 'tract'這個詞也包含了'cat'的排列,所以它也應該算數。 – Henry 2014-10-18 06:43:30

+0

提供更多示例並闡明您的邏輯。 – anubhava 2014-10-18 06:49:06

+0

是的它是劑量計數,但tattc沒有;因爲它不包含連續排列的貓 – QuakeCore 2014-10-18 06:49:44

回答

2

模式中字符的任何排列必須與模式具有完全相同的長度。您可以調查與模式具有相同長度的單詞的所有子字符串,並檢查每個子字符串是否爲模式的排列(例如通過排序字母)。重複每個單詞並計數匹配。

+0

這個問題中指出了這個問題,我知道問題在於,在問題評論中查看鏈接時,明智的做法非常昂貴。 – QuakeCore 2014-10-18 07:12:24

+0

看了一下我自己的問題,實施了它,它的工作原理謝謝 – QuakeCore 2014-10-18 07:20:23

0

到2個步驟

您可以分割的解決方案1-找到你所擁有的單詞的所有排列(cat => 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(); 
} 

希望這將幫助你

如果您還有任何疑問,唐毫不猶豫地提及它,如果它幫助你,請將其標記爲答案。

+1

鑑於模式可以有多達100個字符,這是不實際的。 – Henry 2014-10-18 06:57:51

+0

你知道模式的貓只有三個字符長,但如果模式的長度是100呢?我在 – QuakeCore 2014-10-18 06:58:37

相關問題