思路:

不重复字符的字符串,对字符进行遍历, 回溯解决。结果又N!种情况

含有重复的字符串,普通做法N!种情况肯定不对。比如aa的全排列只有一种。

所以此时不能对字符串进行遍历,而是字符的词频进行遍历,如果词频字符的词频大于0, 就可以用。

#include <iostream>
#include <vector>
#include <string>
#include <map>using namespace std;
string s;
map<char, int> cnt;
vector<char> v;void f(int n)
{if (n == s.length()){for (int i = 0; i < v.size(); i++){cout << v[i];}putchar(10);}else{for (map<char, int>::iterator it = cnt.begin(); it != cnt.end(); it++){if (it->second > 0){it->second--;v.push_back(it->first);f(n + 1);v.pop_back();it->second++;}}}
}int main()
{cin >> s;for (int i = 0; i < s.length(); i++){if (cnt.count(s[i]) == 0){cnt[s[i]] = 1;}else{cnt[s[i]]++;}}f(0);return 0;
}

还有一种调用库的方法,next_permutation(),求序列的下一个字典序。

#include <iostream>
#include <string>
#include <algorithm>using namespace std;int main()
{string s;cin >> s;sort(s.begin(), s.end());do{cout << s << endl;;}while (next_permutation(s.begin(), s.end()));return 0;
}

【算法练习】含重复字符的全排列相关推荐

  1. 每天一道算法题(39)——含有重复字符的全排列

    思路 (1)对于含有重复字符的全排列必须使用isSwap函数 (2)整体思路      a,交换当前子字符串(i----n-1)字符与子字符串后面的每一个位置的字符(满足交换条件下)      b,子 ...

  2. 剑指offer48-最长不含重复字符的子字符串(双指针经典)

    问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 ...

  3. 【每日一练及解题思路V1】给定一个字符串,找出其中不含重复字符的最长子串的长度

    一.题目:给定一个字符串,找出其中不含重复字符的最长子串的长度: 二.举例: 比如"abcdefgh",不含重复字符的最长子串为eacdb,长度为8: 比如"abceac ...

  4. 字符串左侧补0_(48)C++面试之最长不含重复字符的子字符串(动态规划)

    // 面试题48:最长不含重复字符的子字符串 // 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子 // 字符串的长度.假设字符串中只包含从'a'到'z'的字符. #inclu ...

  5. 【LeetCode】剑指 Offer 48. 最长不含重复字符的子字符串

    [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 文章目录 [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 package offer;import ...

  6. 求最长不含重复字符的子字符串——C++

    声明:本文原题主要来自力扣,记录此博客主要是为自己学习总结,不做任何商业等活动! 一.原题描述 剑指 Offer 48. 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串 ...

  7. 最长不含重复字符的子串

    最长不含重复字符的子串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符 ...

  8. 剑指offer -- 最长不含重复字符的字符串

    题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.假设字符串中只包含'a'-'z'的字符.如在"arabcacfr"中,最长的不含重复字符的子字符 ...

  9. 最长不含重复字符的字符串

    题目链接 最长不含重复字符的字符串 题目描述 注意 子字符串是连续的 最终返回的是最长的子字符串的长度 解答思路 采用双指针+哈希表查找,其中右指针遍历整个字符串,左指针只有在左右指针之间出现了相同字 ...

最新文章

  1. 命题思路或将转型,命题方向路在何方
  2. 【深度学习】深度学习之Pytorch基础教程!
  3. java 父类 超类_Java超类-java.lang.object
  4. 佟年计算机天才不会打游戏,《亲爱的热爱的》佟年爱得卑微?其实是韩商言,爱得不够勇敢...
  5. QT 开发openSSL CSR证书请求工具
  6. P3-weixin-2.0.0版本发布(微信插件式开发框架)
  7. spring 使用XML配置开发Spring AOP
  8. Python零基础入门(四)——Python面向对象编程[学习笔记]
  9. python手册中文版pdf-python中文官方文档 PDF 下载
  10. 顺丰丰桥接口开发-不限java(LODOP电子面单打印)
  11. MATLAB函数——fir1
  12. 一个手握安兔兔,一个执掌鲁大师,周鸿祎雷军这场仗谁能赢?
  13. PHP摄影网站怎么制作,摄影网站的设计与实现.doc
  14. Linux下让程序后台运行
  15. 用ec怎么修改网络服务器数值,ec服务器
  16. Party Lemonade
  17. python 均匀分布_python 实现生成均匀分布的点
  18. 空间申请(malloc)与释放(free)——C语言
  19. html并集选择器怎么写,css案例学习之并集选择器
  20. dispatch_source

热门文章

  1. mod_wsgi和php,基于mod_wsgi模式安装Django
  2. C语言程序设计(第4版)谭浩强著—学习笔记chapter one 程序设计与C语言
  3. SKY85728-11低噪声放大器skyworks 高度集成 5 GHz前端模块(FEM)
  4. Putty完全使用方法
  5. 【硬核】年底绩效面谈,涨薪,老板给加了1万块
  6. 【概率论】理解贝叶斯(Bayes)公式:为什么疾病检测呈阳性,得这种病的概率却不高?
  7. 【基础知识】~ 竞争/冒险
  8. ISIS——LSP讲解
  9. linux下运行omnet,Linux中安装OMNeT++过程
  10. 华清远见java课程视频_Java视频教学最适合初学者的学习方式~华清远见