2011-07-31 51 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; 
} 
相关问题