博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】字符串的排列
阅读量:6197 次
发布时间:2019-06-21

本文共 1174 字,大约阅读时间需要 3 分钟。

转载请注明出处:

题目描写叙述:

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

比如输入字符串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
#include
#include
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
/**************************************************************
    
Problem: 1369
    
User: mmc_maodun
    
Language: C
    
Result: Accepted
    
Time:220 ms
    
Memory:8000 kb
****************************************************************/

你可能感兴趣的文章
Oracle如何删除表中重复记录
查看>>
nginx 是如何处理访问请求的
查看>>
wget参数用法详解
查看>>
【COCOS2D-X(1.X 2.X)】Json(cpp版)以及添加自定义字体库教程
查看>>
使用curl命令查看访问url的时间
查看>>
whois
查看>>
python添加环境变量
查看>>
Linux 新手容易犯的 7 个错误
查看>>
DP-01背包 (题)
查看>>
WinForm中跨线程操作控件
查看>>
CODING 敏捷实践完全指南
查看>>
unittest测试框架和测试报告的输出实例(一)
查看>>
下MFC中对象、句柄、ID之间的区别.
查看>>
如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
查看>>
Asp.Net MVC 分页、检索、排序整体实现
查看>>
python 输出当前行号
查看>>
12C -- 配置Application Continuity
查看>>
Redis从入门到精通:初级篇(转)
查看>>
Flymeos插桩适配教程
查看>>
Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询
查看>>