字符串的排列和特定字符串的位置

时间:2016-05-29 06:20:02

标签: java string permutation

我需要编写代码来查找字符串的所有排列,并且还要找到给定的特定字符串的位置。我已经从stackoverflow中找到了这个代码来查找String

的排列
public class StringCombi2 {

public static void permutation(String str) { 
permutation("", str); 
}

private static void permutation(String prefix, String str) {
int n = str.length();
if (n == 0) System.out.println(prefix);

else {
    for (int i = 0; i < n; i++)

        permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
}


}

public static void main(String arsd[])
{
permutation("student");
}
}

此代码打印String&#34; Student&#34;。

的所有可能排列

现在我需要找到String&#34; Studten&#34;的位置。并打印其位置(例如,位置)

我不知道如何找到它......任何人都可以帮助我...

实施例: 输出将像这样生成

学生 studetn studnet studnte studten studtne stuednt stuedtn stuendt stuentd 。 。

字符串Studten是在迭代4上生成的。所以String&#34; Studten&#34;是4。

我必须使用java代码找到它...

1 个答案:

答案 0 :(得分:1)

如果您希望使用置换输出显示迭代,最简单的方法是创建一个全局计数器,使用置换打印计数器,并在以下后立即递增计数器:

public class StringCombi2 {

    private static int counter = 0; //create counter

    public static void permutation(String str) {
        permutation("", str);
    }

    private static void permutation(String prefix, String str) {
        int n = str.length();
        if (n == 0) {
            System.out.println(counter + ": " + prefix); //print counter with permutation
            counter++; // increment counter
        } else {
            for (int i = 0; i < n; i++)
                permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n));
        }
    }

    public static void main(String arsd[]) {
        permutation("student");
    }
}

如果您只想显示您关心的迭代,可以放置另一个if语句来检查当前排列是否等于您要查找的排列。当你这样做时,你会发现“studten”出现两次:

public class StringCombi2 {

    private static int counter = 0;

    public static void permutation(String str) {
        permutation("", str);
    }

    private static void permutation(String prefix, String str) {
        int n = str.length();
        if (n == 0) {
            if (prefix.equals("studten")) {
                System.out.println(prefix + " is at iteration: " + counter);
            } else {
                counter++;
            }

        } else {
            for (int i = 0; i < n; i++)
                permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n));
        }
    }

    public static void main(String arsd[]) {
        permutation("student");
    }
}

,您的输出将是:

studten is at iteration: 4
studten is at iteration: 629