博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
包含重复元素的字符串全排列
阅读量:4931 次
发布时间:2019-06-11

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

思路:编写字符串全排列,首先想到的就是用递归。依次从后面的字符中选择一个不重复的字符替换掉第一个字符,即要注意排除重复选择的情况。然后递归下去,对第二个个位置的字符也采取相同的方法进行替换然后全排列 > > >

至于needSwap为什么是从s [ start ]至s [ end - 1] 元素与s [ end ] 元素比较,而不是直接将s [ start ] 和 s [ end ]进行比较,是因为可能 start ~ end - 1之间有和s [ end ] 相同的元素,即这中间可能有重复元素。我刚开始就是在这里选择了后者,这肯定是不对的,因为我这样的话只有这中间没有重复元素时才能跑对。

#include 
using namespace std;bool needSwap(string s, int start, int end) { for (int k = start; k < end; ++k) if (s[k] == s[end]) return false; return true;}void swap(string &s, int i, int j) { char tmp = s[i]; s[i] = s[j]; s[j] = tmp;}void permutation(string s, int start, int length) { if (length < 1) return; if (start < length) { for (int i = start; i < length; ++i) { if (needSwap(s, start, i)) { swap(s, start, i); permutation(s, start + 1, length); swap(s, start, i); } } } else { cout << s << endl; }}int main() { string s; while (cin >> s) { permutation(s, 0, s.length()); } return 0;}

转载于:https://www.cnblogs.com/lj95/p/10260716.html

你可能感兴趣的文章
14-6-27&28自学内容小结
查看>>
JSP
查看>>
---
查看>>
(第一组_GNS3)自反ACl
查看>>
hdu--1258--Sum It Up(Map水过)
查看>>
Spring @DeclareParents 的扩展应用实例
查看>>
VS2012更新Update1后帮助查看器无法打开
查看>>
【Weiss】【第03章】练习3.9:大整数运算包
查看>>
Android 文件的读取和写入
查看>>
机器学习-加权采样算法简介
查看>>
高校表白APP-冲刺第四天
查看>>
outlook 设置163邮箱
查看>>
mysql优化——show processlist命令详解
查看>>
Solr服务器搭建
查看>>
画世界怎么用光影_世界绘画经典教程:水彩光影魔法教程
查看>>
matlab提取caffe模型,深度學習Caffe實戰筆記(10)Windows Caffe使用MATLAB接口提取和可視化特征...
查看>>
win+rsync+php,跨平台的fswatch+rsync同步备份
查看>>
vue2 cdn 加载html,vue项目中使用CDN加载
查看>>
数组转集合踩坑
查看>>
node.js的异步I/O、事件驱动、单线程
查看>>