Java利用字符串输入数据的无重复全排列
时间: 2024-04-30 17:18:22 浏览: 7
可以使用递归的方法来实现字符串的全排列,具体步骤如下:
1. 将字符串转换为字符数组。
2. 从第一个字符开始,依次与后面的字符交换位置,得到所有可能的排列。
3. 在每一次交换前,先判断该字符是否已经交换过,如果已经交换过则不交换,避免重复。
4. 当交换到最后一个字符时,将得到一种排列,输出结果。
以下是Java代码实现:
```
import java.util.HashSet;
import java.util.Set;
public class StringPermutation {
public static void main(String[] args) {
String str = "abc";
permutation(str.toCharArray(), 0, new HashSet<String>());
}
public static void permutation(char[] chars, int start, Set<String> set) {
if (start == chars.length - 1) {
String s = String.valueOf(chars);
if (!set.contains(s)) {
System.out.println(s);
set.add(s);
}
} else {
for (int i = start; i < chars.length; i++) {
if (i != start && chars[i] == chars[start]) {
continue;
}
swap(chars, start, i);
permutation(chars, start + 1, set);
swap(chars, start, i);
}
}
}
public static void swap(char[] chars, int i, int j) {
char temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
}
```
在上面的代码中,我们使用了一个`Set`来去重,确保输出的结果中没有重复的排列。同时,我们在每一次交换前都判断了该字符是否已经交换过,避免了重复。