2011-07-31 50 views
-2

我有一個字符串,改變字母位置字符串中我會得到新的字符串後,在這裏,我必須使用字典和檢查新組成的字符串是否有意義還是不是?檢查如果新提交的字符串是一個有效的字

我怎麼能做到這一點在Java中?

請幫助我!

舉例: 字符串:CAT 從這個我可以交,ACT,CAT等。

爲公司的Java程序「從一個特定的詞找到意味深長的話,一旦我們把它打亂「

+1

你嘗試過什麼到目前爲止的代碼來實現你的任務是什麼? – canadiancreed

+0

你確定你必須使用java.util.Dictionary。它現在被認爲是過時的,去污染的,不使用的。 –

+0

我認爲他的意思是「字典」而不是「字典」類。 –

回答

1

創建一組字母(這是字符串)的所有子集。這是可以做到既遞歸或迭代地(提示:使用一個1個比特如果在元件中存在的文字和否則爲0;你知道,一組具有2^n個元素,所以你只是必須產生從[0的所有位, 1 < < set.size()]並使用它來構造集合)。

解析這個集合的每個結果元素,並檢查它是否在字典中(例如,你可以使用HashMaps)使用元素字符串作爲關鍵字。如果你能證明一些代碼,我就能引導你從那裏....

編輯:

我誤解你想要的字符串的排列不套將以下問題。製作所有子集將要求您消除長度小於給定字符串的元素,這是低效的。那麼你將不得不採取不同的方式。

假設你有 「ABC」。你將如何繼續?

elem 1 => 「a」, remainder => 「bc」 
1. permute(bc) = {「bc」, 「cd」} 
2. Add 「a」 into each location of 「bc」 (「abc」, 「bac」, 「bca」) and 
    「cb」 (「acb」, 「cab」, 「cba」) 
3. Return this list 

現在嘗試編碼這個遞歸...

1

假設你問如何檢查每個排列,看它是否是一個有效的詞,如何實際計算排列,您可以執行對一個Set,其中包括所有的有效的話,像查找:

private static final Set<String> myDictionary = new HashSet<String>(); 

static { 
    //put some values in the dictionary of valid words (or even better: load it from a file) 
    myDictionary.add("CAT"); 
    myDictionary.add("DOG"); 
    //... 
} 

public static void main(String[] args) { 
    List<String> permutations = permute("CAT"); 
    for (String candidate : permutations) { 
     if (myDictionary.contains(candidate)) { 
      System.out.println("Found a valid word: " + candidate); 
     } 
    } 
} 
+0

你打算檢查所有n!排列?它會toooo慢len> 15 – RiaD

+0

@RiaD - 這聽起來像什麼被要求。你有什麼建議?將字典分解成按字長分組的不同子集,然後對給定的輸入字符串迭代與輸入長度對應的子集,檢查哪些字是輸入的排列?因爲這應該起作用,但它聽起來並不像OP要求的那樣。 – aroth

0
public bool checkisSecondStringValidFromFirst(String str, String checkstr){ 
    int n=str.length(); 
    if(n!=checkstr.length())return false; 
    char[] cstr=str.toCharArray(); 
    char[] ccstr=checkstr.toCharArray(); 
    Arrays.sort(cstr); 
    Arrays.sort(ccstr); 
    for(int i=0;i<n;++i){ 
     if(cstr[i]!=ccstr[i]) 
      return false; 
    } 
    return true; 
} 
相關問題