数据结构与算法之字符串排列

字符串排列指的是将一个字符串中的所有字符按照一定顺序进行排列,使得得到一个新的字符串。例如,字符串"abc"的排列有"abc"、“acb”、“bac”、“bca”、“cab”、"cba"六种可能。

字符串排列的原理可以通过递归实现。假设输入的字符串为s,先将第一个字符和后面的字符依次交换位置,得到新字符串s’。接着将s’的第一个字符和剩下的字符进行交换,得到新字符串s’'。以此类推,直到交换到最后一个字符。

在实现字符串排列时,需要注意以下几点:

  1. 对于有重复字符的字符串,需要去重,避免出现重复排列。

  2. 递归实现时,需要在每一次交换后将原始字符串还原,以便进行下一次交换。

  3. 递归实现时,可以通过设置一个标志位记录当前字符是否已经交换过,避免重复交换。

以下是使用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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值