找到句子中所有单词的排列

我怎样才能在一个句子中得到所有单词的排列。你能给出一个示例c#代码吗? 例如:如果句子是“C#not java”,输出应该是,1)c#not java 2)c#java not 3)java not c#4)java c#not 5)not java c#6)not c#java等

试试这是否适合你。

public static List PermuteWords(string s) { string[] ss = s.Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries); bool[] used = new bool[ss.Length]; string res = ""; List list = new List(); permute(ss, used, res, 0, list); return list; } private static void permute(string[] ss, bool[] used, string res, int level, List 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. 将句子分成单词
  2. 做排列

而且,另外,重复怎么样?
“绿色绿色包” – 如果你看到我的观点,这个句子有两个被认为是“排列”的句子。

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

在示例中,您有3个单词意味着对于第一个单词,第二个单词有3种可能性,您有2种可能性,对于第三个单词,您只有1个。不重复的排列数量为3! (3 * 2 * 1)= 6。

第一个字| 第二个字| 第三个字

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

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

(一般情况:n!)……

防爆。 (这个例子可以用文字实现)。

1 2 3 4

排列没有重复。

 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 

我刚刚修改了上面的版本:

 import java.util.*; public static List PermuteWords(String s) { String[] ss = s.split(" "); boolean[] used = new boolean[ss.length]; String res = ""; List list = new ArrayList(); permute(ss, used, res, 0, list); return list; } private static void permute(String[] ss, boolean[] used, String res, int level, List 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 ls=new ArrayList(); ls = PermuteWords(str); Iterator it=ls.iterator(); int i = 0; while(it.hasNext()) { String value=(String)it.next(); System.out.println(++i + " " + value); }