2010-04-14 97 views
2

如何获得一个句子中所有单词的排列组合。例如:如果句子是“C#不是java”, 输出应该是,1)c#不是java 2)c#java不是3)java不是c#4)java c#不是5)不是java c#6)不是c#java等。找到句子中所有单词的排列组合

+1

如果你告诉我们你已经尝试过,我们可以帮助您解决问题。 – sblom 2010-04-14 08:25:19

+2

你是否为做这个家伙的功课感到自豪? – 2010-08-05 03:09:48

回答

1

试试看,如果这对你有用。

public static List<string> PermuteWords(string s) 
    { 
     string[] ss = s.Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries); 
     bool[] used = new bool[ss.Length]; 
     string res = ""; 
     List<string> list = new List<string>(); 
     permute(ss, used, res, 0, list); 
     return list; 
    } 

    private static void permute(string[] ss, bool[] used, string res, int level, List<string> list) 
    { 
     if (level == ss.Length && res != "") 
     { 
      list.Add(res); 
      return; 
     } 
     for (int i = 0; i < ss.Length; i++) 
     { 
      if (used[i]) continue; 
      used[i] = true; 
      permute(ss, used, res + " " + ss[i], level + 1, list); 
      used[i] = false; 
     } 
    } 
1

分离到这个两个任务:

  1. 拆分句子译成话
  2. 执行排列

而且,除此之外,什么副本?
“绿色环保袋” - 如果你看到我的观点,这句话有两个“排列组合”。

注意:它不是纯粹的asp.net,它更像是一个排列问题。一旦你有了排列,当然你可以把它们渲染成HTML。

0

在这个例子中你有3个词语意味着对于第一个字有3种可能性用于第二字您有2种可能性和第三字你只有1. 排列的没有重复的量3! (3 * 2 * 1)= 6.

第一句话|第二个字|第三个字

(3件)| (2例)| (1例)

另一个例子是4个单词。 4! = 24.

(一般情况:n!)...

Ex。 (这个例子可以用单词来实现)。

无重复的排列。

1 2 3 4 
1 2 4 3 
1 3 2 4 
1 3 4 2 
1 4 3 2 
1 4 2 3 

2 1 3 4 
2 1 4 3 
2 3 1 4 
2 3 4 1 
2 4 3 1 
2 4 1 3 

3 1 2 4 
3 1 4 2 
3 2 1 4 
3 2 4 1 
3 4 2 1 
3 4 1 2 

4 1 2 3 
4 1 3 2 
4 2 1 3 
4 2 3 1 
4 3 2 1 
4 3 1 2 
0

我只是修改上面的版本:

import java.util.*; 

public static List<String> PermuteWords(String s) 
{ 
    String[] ss = s.split(" "); 
    boolean[] used = new boolean[ss.length]; 
    String res = ""; 
    List<String> list = new ArrayList<String>(); 
    permute(ss, used, res, 0, list); 
    return list; 
} 

private static void permute(String[] ss, boolean[] used, String res, int level, List<String> list) 
{ 
    if (level == ss.length && res != "") 
    { 
     list.add(res); 
     return; 
    } 
    for (int i = 0; i < ss.length; i++) 
    { 
     if (used[i]) continue; 
     used[i] = true; 
     permute(ss, used, res + " " + ss[i], level + 1, list); 
     used[i] = false; 
    } 
} 

你也可以使用下面的代码来测试这些功能:

List<String> ls=new ArrayList<String>(); 

ls = PermuteWords(str); 
Iterator it=ls.iterator(); 

int i = 0; 
while(it.hasNext()) 
{ 
    String value=(String)it.next(); 
    System.out.println(++i + " " + value); 
} 
+0

没有意识到它是C#哈哈 – Dima 2010-08-05 03:00:06

相关问题