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

时间:2010-04-14 08:22:53

标签: c# asp.net

如何在句子中获得所有单词的排列。你能给出一个示例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 etc。

4 个答案:

答案 0 :(得分:1)

将其分为两个任务:

  1. 将句子分成单词
  2. 进行排列
  3. 另外,重复怎么样?
    “绿色绿色包” - 如果你明白我的意思,这个句子有两个被认为是“排列”的句子。

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

答案 1 :(得分: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;
        }
    }

答案 2 :(得分:0)

在示例中,您有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

答案 3 :(得分: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);
}
相关问题