转载请注明出处:http://blog.csdn.net/ns_code/article/details/26390551

题目描写叙述:

输入一个字符串,按字典序打印出该字符串中字符的全部排列。

比如输入字符串abc,则打印出由字符a,b,c所能排列出来的全部字符串abc,acb,bac,bca,cab和cba。

输入:

每一个測试案例包含1行。

输入一个字符串,长度不超过9(可能有字符反复),字符仅仅包含大写和小写字母。

输出:

相应每组数据,按字典序输出全部排列。

例子输入:
abc
BCA
例子输出:
abc
acb
bac
bca
cab
cba
ABC
ACB
BAC
BCA
CAB
CBA

昨晚折腾了一个晚上。连这一道题目都没AC。太受打击了。这里倒不是算法的问题。主要是既要考虑输出的字符串按字典序排列,又要去掉反复的字符串。本想直接在不保存全部字符串的前提下,直接依照要求输出字符串,但折腾了一晚上,还是决定放弃了,依旧是使用最直接的方法。以空间换取结果,将全部的字符串保存到一个字符串数组中,因为全排列后的字符串数最大为9!

=362880。故开辟一个362900大的字符串数组用来保存这些字符串,而后对这些字符串进行排序,先用了选择排序。通过strcpy字符串进行排序,结果争取,但第三组測试用例超时,无奈,最后还是要用系统自带的qsort快排函数,这次AC了,顺带也复习了下qsort的使用方法,了解的更深入了些。

AC代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>char result[362900][10];
int count = 0; //排列字符串的个数/*
交换两个字符
*/
void swap(char *a,char *b)
{char temp = *a;*a = *b;*b = temp;
}/*
对字符串str从begin開始的后面的字符进行排列
*/
void Permutation(char *str,int begin)
{int len = strlen(str);if(begin == len-1){strcpy(result[count++],str);return;}int i;for(i=begin;i<len;i++){swap(&str[begin],&str[i]);Permutation(str,begin+1);swap(&str[begin],&str[i]);}
}/*
将Permutation封装起来
*/
void PermutationAllChar(char *str)
{if(str == NULL)return ;Permutation(str,0);
}/*
比較str1和str2的大小
*/
int myCompare(const void *a,const void *b)
{char *s1 = (char *)a;char *s2 = (char *)b;return strcmp(s1,s2);
}int main()
{char str[10];while(gets(str)){PermutationAllChar(str);//快排对字符串数组进行字典排序//之前採用选择排序,并通过复制字符串排序,OJ上报超时//改用快排。AC。qsort(result,count,10*sizeof(char),myCompare);//跳过反复字符串int i;for(i=0;i<count;i++){if(strcmp(result[i],result[i+1]) == 0)continue;puts(result[i]);}//下一个字符的排列依旧从result数组的開始处開始存放count = 0;}return 0;
}
/**************************************************************
    Problem: 1369
    User: mmc_maodun
    Language: C
    Result: Accepted
    Time:220 ms
    Memory:8000 kb
****************************************************************/

【剑指offer】字符串的排列相关推荐

  1. [230516 剑指38] 字符串的排列

    [230516 剑指38] 字符串的排列 一 题目 剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. ...

  2. 剑指Offer_27_字符串的排列

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 结果请按字母顺 ...

  3. 剑指Offer字符串加法问题

    1.题目描述 输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果.要求程序尽可能的高效.示例如下: /** * @param a ...

  4. 剑指Offer字符串转换成整数

    题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...

  5. 【击败时间100%】剑指 Offer 38. 字符串的排列

    立志用最少的代码做最高效的表达 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输出 ...

  6. 力扣OJ 剑指 Offer II

    目录 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 004. ...

  7. 剑指offer 第二版(101——119)(全部完结)

    剑指 Offer II 101. 分割等和子集 bool canPartition(vector<int>& nums) {int sum=0;for(int i=0;i<n ...

  8. [字符串] --- 字符串的排列(剑指 Offer 38)

    [试题描述] 输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb ...

  9. java牛客排序算法题_《剑指offer》面试题28:字符串的排列(牛客网版本) java...

    输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入一个字符 ...

  10. 【LeetCode】剑指 Offer 38. 字符串的排列

    [LeetCode]剑指 Offer 38. 字符串的排列 文章目录 [LeetCode]剑指 Offer 38. 字符串的排列 package offer;import java.util.Hash ...

最新文章

  1. [面试]future模式
  2. 单片机干嘛的?嵌入式是单片机吗?
  3. 如何用纯 CSS 创作一个单元素抛盒子的 loader
  4. 李飞飞团队从动物身上get AI新思路,提出RL计算框架,让机器在复杂环境学习和进化...
  5. python 内置方法的时间复杂度
  6. centos 6.5 安装 redis
  7. 动态规划生产存储matlab,基于Matlab的动态规划算法的实现及应用
  8. JavaScript判断一个变量是对象还是数组
  9. 操作系统--死锁避免(银行家算法)
  10. Thymeleaf的Spring数据
  11. 极光推送 android 最新,Android——快速集成极光推送-Go语言中文社区
  12. LeetCode 461. Hamming Distance
  13. Build.VERSION类
  14. 精度、误差与分辨率的研究
  15. c++做界面_一看就会做系列 SmartLink远程诊断发布需求指南简单版
  16. 50台计算机教室怎样布线,电教室布线技巧有哪些?
  17. 华为手表 android app,华为手表app叫什么
  18. 一个高效的积分兑换商城系统怎么搭建
  19. 关于win10桌面图标位置错乱的原因及解决办法
  20. 基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计

热门文章

  1. 将图片转存为其它颜色格式(GDI+)
  2. 我买网勾搭搜狐吃货自媒体联盟 大搞自媒体“晒图”营销?
  3. SilverLight 4页面跳转大全(转载)
  4. PHP 设计模式之数据对象映射模式
  5. 冲刺阶段——Day2
  6. javascript 练习(2)——js数组去重
  7. Code First 迁移
  8. 数据结构——双向链表的实现
  9. fir.im Weekly - 给 Mac 应用开发者的教程
  10. leetcode-Excel Sheet Column Title