数据结构与算法之字符串排列
字符串排列指的是将一个字符串中的所有字符按照一定顺序进行排列,使得得到一个新的字符串。例如,字符串"abc"的排列有"abc"、“acb”、“bac”、“bca”、“cab”、"cba"六种可能。
字符串排列的原理可以通过递归实现。假设输入的字符串为s,先将第一个字符和后面的字符依次交换位置,得到新字符串s’。接着将s’的第一个字符和剩下的字符进行交换,得到新字符串s’'。以此类推,直到交换到最后一个字符。
在实现字符串排列时,需要注意以下几点:
-
对于有重复字符的字符串,需要去重,避免出现重复排列。
-
递归实现时,需要在每一次交换后将原始字符串还原,以便进行下一次交换。
-
递归实现时,可以通过设置一个标志位记录当前字符是否已经交换过,避免重复交换。
以下是使用Java代码实现字符串排列的示例:
public ArrayList<String> permutation(String s) {
ArrayList<String> res = new ArrayList<>();
if (s == null || s.length() == 0) {
return res;
}
char[] chars = s.toCharArray();
permutation(chars, 0, res);
return res;
}
private void permutation(char[] chars, int i, ArrayList<String> res) {
if (i == chars.length - 1) {
res.add(new String(chars));
return;
}
for (int j = i; j < chars.length; j++) {
if (j == i || chars[j] != chars[i]) {
swap(chars, i, j);
permutation(chars, i + 1, res);
swap(chars, i, j);
}
}
}
private void swap(char[] chars, int i, int j) {
char temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}

一、C 实现 字符串排列 及代码详解
字符串的排列指的是对字符串内部的字符进行排列组合,并输出所有可能的排列。例如,字符串 “abc” 的排列有 “abc”、“acb”、“bac”、“bca”、“cab” 和 “cba”。
以下是 C 语言实现字符串排列的代码及其详解:
#include <stdio.h>
#include <string.h>
void swap(char *a, char *b) {
char temp = *a;
*a = *b;
*b = temp;
}
void permute(char *str, int l, int r) {
if (l == r) {
printf("%s\n", str);
} else {
for

3万+

被折叠的 条评论
为什么被折叠?



