3.30更新

 #include <iostream>
#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;
int main()
{
int T;cin>>T;
for(int m=;m<T;m++)
{
string s;cin>>s;
sort(s.begin(),s.end());
s.resize(unique(s.begin(),s.end())-s.begin()); int ll=s.size();
int sum=~((-)<<ll)+; set<string> ans;
while(sum-->)
{
string tmp;
for(int d=,i=;i<ll;d=d<<,i++)
if(sum&d) tmp+=s[i];
ans.insert(tmp);
}
printf("case #%d:\n",m);
for(string x:ans)cout<<x<<endl; }
return ;
}

使用位运算更简便,更新排序unique的操作,并且使用set容器。


3.29更新

 #include<bits/stdc++.h>
#define ALL(x) x.begin(),x.end()
using namespace std;
set<string> ans;
string s,ss,ret;
void comb(int n,string s){/*我这个也是递归*/ for(int i=n;i<ss.size();i++){
ans.insert(s+ss[i]);
comb(i+,s+ss[i]);
}
}
int main()
{
int T;cin>>T;
for(int m=;m<T;m++){
cin>>s;
ss=ret=string{};
ans.clear();
sort(ALL(s));
unique_copy(ALL(s),back_inserter(ss));
comb(,ret);
printf("case #%d:\n",m);
for(string x:ans) cout<< x <<endl;
}
return ;
}

用递归方式实现,核心代码只需3行!

既然题目说明ab和ba等价,每次只需要从上一个指定位置向后看就好了。比如递归b的时候就不会从a开始了。

一开始用回溯,加加减减的没有必要,既然递归的局部变量在函数退出时消亡,干脆直接传进去好了。


输入一个由字母组成的字符串 S(1≤长度≤16),按字典序输出由 S 中不同字符组成的所有字符组合(每个组合中的字符也按字典序排列)。

例如:“cbaabc” 中的不同字符是 ‘a’、‘b’、‘c’ 共 3 个,则 1 个字符组成的组合是 “a”、“b”、“c”3 种,2 个字符组成的组合是 “ab”、“bc”、“ac”3 种,3 个字符组成的组合是 “abc”1 种。注意:“ab” 和 “ba” 由相同字符组合而成,因此可认为是同一个组合。那么这个例子共有 7 种组合,按序分别为 “a”、“ab”、“abc”、“ac”、“b”、“bc”、“c”。


 #include <iostream>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int T;cin>>T;
for(int m=;m<T;m++)
{
int flag[]={};char c;
vector<char> v;
string s;cin>>s;
for(char x:s) v.push_back(x);
sort(v.begin(),v.end());
v.resize(unique(v.begin(),v.end())-v.begin()); int ll=v.size();
long long sum=;
for(int i=;i<ll;i++)
sum+=pow(,i);
vector<string > ans;
for(;sum>=;sum--)
{
string tmp;
for(int i=ll-,d=;i>=;i--,d<<=)
if(sum&d) tmp.insert(tmp.begin(),v[i]);
ans.push_back(tmp);
}
sort(ans.begin(),ans.end());
printf("case #%d:\n",m);
for(int i=;i<ans.size();i++)
cout<<ans[i]<<endl; }
return ;
}

排序去重后二进制枚举即可。

EOJ 3023 字符组合的更多相关文章

  1. JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符

    package com.pb.demo.packclass.demo1; import java.util.HashSet; /** * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符 ...

  2. 华为机试ACM(字符组合问题)

    今晚做了华为的机试,3道ACM题,最后一道是实现从M个不同字符中任取N个字符的所有组合. eg: input:ABC 2 output:AB AC BC 第一个输入为字符串,第二个输入为组合的字符个数 ...

  3. js验证:密码只能为大写字母+小写字母+数字的8至15位字符组合

    var reg = /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{8,15}$/; // alert(password); if(reg.test(pa ...

  4. java随机生成字符串(字符随机生成类 生成随机字符组合)

    原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...

  5. PHP正则匹配6到16位字符组合(且只能为数字、字母、下划线)

    php正则匹配6到16位的字符串. 只允许包含数字.字母.下划线组成的6到16位字符,符合返回ture,否则返回false. 解答: 6到16位,正则可以这样写:{6,16}. 任意的字符6到16位的 ...

  6. 24.Letter Combinations of a Phone Number(电话号对应的字符组合)

    Level:   Medium 题目描述: Given a string containing digits from 2-9 inclusive, return all possible lette ...

  7. C# 简单的统计指定几个字符组合的所有结果

    比如 用 a,b,c,d 4个字符组成一个8个长度的字符串,问一共有多少可能,应该有4的8次方种,用代码简单实现 private string[] AAA() { string[] cs = { &q ...

  8. LeetCode 17 Letter Combinations of a Phone Number (电话号码字符组合)

    题目链接 https://leetcode.com/problems/letter-combinations-of-a-phone-number/?tab=Description HashMap< ...

  9. 剑指offer-拓展训练-字符的所有组合-全组合

    /* 题目: 给定不含重复字符字符串的全组合. */ /* 思路: 递归法. 例给定abc,输出的组合长度为1,2,3. 对于长度为2的组合,分选择a(ab,ac)和不选择a的情况(bc). 选择a, ...

随机推荐

  1. JS——标记

    continue 语句(带有或不带标签引用)只能用在循环中.break 语句(不带标签引用),只能用在循环或 switch 中.通过标签引用,break 语句可用于跳出任何 JavaScript 代码 ...

  2. The type new View.OnClickListener(){} must implement the inherited abstract method View.Onclicklis

    public class MainActivity extends Activity { protected Button startBrew = null; @Override protected ...

  3. TCP报文到达确认(ACK)机制

    TCP数据包中的序列号(Sequence Number)不是以报文段来进行编号的,而是将连接生存周期内传输的所有数据当作一个字节流,序列号就是整个字节流中每个字节的编号.一个TCP数据包中包含多个字节 ...

  4. 扩增子图表解读1箱线图:Alpha多样性

    箱线图 箱形图(Box-plot)又称为盒须图.盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在宏基因组领域,常用于展示样品组中各样品Alpha多样性的分布 第一种情 ...

  5. DDX DDV 用法

    DDX:Dialog Data Exchange 如果使用DDX机制,一般会在OnInitDialog消息处理函数或Dialog构造函数中,为对话框对象的成员变量设置了初始值.在对话框显示前,框架的D ...

  6. 用C#在Visual Studio写Javascript单元测试

    1.在vs创建一个标准的单元测试工程 2.引用nuget包:Edge.js 我是用的是6.11.2版本 3.编写JsRunner类 using EdgeJs; using System; using ...

  7. IO编程——复制一个文件中的内容到另一个文件

    public class TestIO { public static void main(String[] args) { File inputFile = new File("a.txt ...

  8. CF17E Palisection (回文自动机+DP)

    题目传送门 题目大意:给你一个字符串,让你求出有多少对相交的回文子串 啊啊啊啊降智了,我怎么又忘了正难则反! 求相交会很难搞.把问题转化成求互不相交的回文子串再减一下就行了 先利用$PAM$求出以每个 ...

  9. Linux判断

    #字符串比较if [ "$1" == "判断条件" ] then echo "$1" elif [ "$1" == &q ...

  10. Mac在python3环境下安装virtualwrapper遇到的问题

    前言 我在使用mac安装virtualwrapper的时候遇到了问题,搞了好长时间,才弄好,在这里总结一下分享出来,供遇到相同的问题的朋友使用,少走些弯路. 问题说明: Mac默认系统的python2 ...