我需要编写代码来查找字符串的所有排列,并且还要找到给定的特定字符串的位置。我已经从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代码找到它...
答案 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