`
yyang900427
  • 浏览: 11580 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

字符串的排列

阅读更多

/**
 * 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则
 * 输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
 */

#include <stdio.h>

static void swap(char array[], int i, int j)
{
	char tmp = array[i];
	array[i] = array[j];
	array[j] = tmp;
}

static int contains(char array[], int m, int n)
{
	for(int i = m; i < n; ++i)
	{
		if(array[i] == array[n])
			return 1;
	}
	return 0;
}

void permutation(char array[], int index, int n)
{
	if(index == n)
	{
		for(int i = 0; i < n; ++i)
		{
			printf("%c", array[i]);
		}
		printf(" ");
	}
	else
	{
		for(int i = index; i < n; ++i)
		{
			// 去重比如字符数组是{'a', 'a', 'b'}
			if(contains(array, index, i))
				continue ;

			swap(array, index, i);
			permutation(array, index + 1, n);
			swap(array, index, i);
		}
	}
}

main()
{
	char array[] = {'a', 'b', 'c'};
	permutation(array, 0, 3);
}

运行结果: abc acb bac bca cba cab 

分享到:
评论

相关推荐

    字符串排列组合

    在编程领域,字符串排列组合是一个常见的算法问题,它涉及到如何生成一个字符串的所有可能的排列方式。这个主题主要与计算机科学的算法设计和技术有关,尤其是在数据结构和算法分析的课程中经常遇到。本节将深入探讨...

    字符串排列问题,不含重复

    在IT领域,字符串排列问题是一个经典的算法问题,它涉及到组合数学和计算机科学中的排序与搜索。本问题的核心是求解一个字符串中不重复字符的所有可能排列,并计算这些排列的总数。这个问题可以使用C++这样的编程...

    列出字符串的全部排列组合

    从给定的代码片段来看,该程序旨在生成一个字符串的所有可能排列组合,但代码实现上存在一些问题,例如,函数命名、逻辑结构以及对内存管理的处理方式等,都偏离了标准的C语言编程实践。下面,我们将深入解析标题、...

    C++字符串的全部排列

    以下是使用回溯法实现C++字符串排列的伪代码: ```cpp void permute(string str, int start) { if (start == str.size()) { // 打印或处理排列 cout ; return; } for (int i = start; i (); i++) { swap...

    输出一个字符串的所有排列

    在编程领域,字符串排列是一个经典的算法问题,主要涉及到字符串处理和递归技术。字符串的所有排列是指将一个字符串中的字符按照不同的顺序重新组合,形成所有可能的字符串。这个问题通常用于考察程序员对递归的理解...

    PHP多个字符串排列组合的算法,组二,组三

    在PHP编程语言中,处理字符串的排列组合是常见的任务,特别是在数据分析、彩票系统或其他需要生成所有可能结果的场景中。本篇文章将详细讲解如何利用PHP实现字符串的组合算法,特别是针对“组二”和“组三”的组合...

    java实现字符串排列组合问题

    Java 实现字符串排列组合问题 Java 是一门广泛应用于软件开发的编程语言,字符串操作是其最基本也是最重要的功能之一。在实际开发中,字符串排列组合问题是非常常见的,例如输入一个字符串,要求输出该字符串中...

    Java实现abc字符串排列组合

    "Java实现abc字符串排列组合" 本文将详细介绍Java实现abc字符串的排列组合,主要包括可重复排列、全排列和组合三个部分。 可重复排列 在Java中,可以使用递归来实现abc字符串的可重复排列。可重复排列是指从abc三...

    字符串面试题整理

    4. **字符串排列组合问题**: - 问题1:字符串的全排列,可以通过回溯算法实现,每次选择未使用的字符并递归到下一层。 - 问题2:字符串的组合,可以使用递归或者动态规划。递归方法中,每次可以选择使用当前字符...

    36.字符串的排列1

    总之,这个解决方案展示了如何利用深度优先搜索来解决全排列问题,通过递归和回溯生成所有可能的字符串排列,并将其存储在一个有序的向量中。这种方法在理解和实现上都相对直观,但需要注意对大字符串时可能出现的...

    字符串重新排序

    排序完成后,将排序后的数组转换回字符串,即可得到重新排列的新字符串。 题目中提到了在"NewOrder中"添加条件,这暗示了可能需要根据某些规则或约束进行排序。例如,条件可能是新字符串必须是递增或递减的,或者新...

    oracle数据库截取字符串

    * `substr("ABCDEFG", 0, -3)` 返回:EFG,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变。 二、instr 函数 instr 函数用于查找字符串中的子字符串,语法为 `instr(string, subString, position, ...

    (ABCDE)字符串排序

    标题 "(ABCDE)字符串排序" 描述了一个使用C++编程语言实现字符串排列的问题。通过四种不同的模板和系统函数,特别是利用`string_permutation`方法,我们可以生成一个字符串的所有可能排列。这种排列通常涉及到...

    编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。

    新字符串中的字符按照在字符串`t`中的原始顺序排列,并且要去掉重复的字符。 ### 1. 问题理解与分析 题目要求我们找出字符串`t`中所有不在字符串`s`中出现的字符,并按照`t`中的顺序排列组成新的字符串存储到`p`所...

    生成字符串的全排列,可以用回溯法实现

    在字符串全排列问题中,我们需要找出一个给定字符集的所有可能的排列组合。例如,对于字符串 "abc",全排列包括 "abc"、"acb"、"bac"、"bca"、"cab" 和 "cba"。这个问题可以使用回溯法来解决,其基本步骤如下: 1. ...

    Java排列组合字符串的方法

    Java 排列组合字符串是一种常见的编程问题,旨在生成所有可能的字符串排列组合。下面我们将详细介绍 Java 排列组合字符串的方法。 什么是排列组合 排列组合是一种数学概念,指的是从一个集合中选择部分元素,并将...

    php一个解析字符串排列数组的方法

    本文实例讲述了php一个解析字符串排列数组的方法。分享给大家供大家参考。具体如下: &lt;?php $str=1|苹果|30 1|桃子|50 1|普通|10 2|小麦|100 2|玉米|35 2|大米|30 3|电脑|5 3|MP3|121 3|打印机|8; $strArray=...

    字符串的排列(dfs)1

    整个算法的核心在于`dfs`函数,它利用递归的方式构建所有可能的字符串排列。由于每次构造新字符串时,都会检查已使用的字符并进行回溯,所以不会产生重复的排列。在`permutation`函数中,我们先使用`dfs`得到所有...

    截取特定部分字符串

    5. **标签中的“排列”**:这可能指的是对截取的子字符串进行排序。在Java中,我们可以使用`Arrays.sort()`方法对字符串数组进行排序,或者使用`Collections.sort()`方法对`List&lt;String&gt;`进行排序。对于单个字符串,...

    C语言程序设计-对长度为8个字符的字符串,将8个字符按降序排列;例如:原来的字符串为CEAedcab,排序后输出为edcbaE

    C语言程序设计-对长度为8个字符的字符串,将8个字符按降序排列;例如:原来的字符串为CEAedcab,排序后输出为edcbaE

Global site tag (gtag.js) - Google Analytics