求字符串的所有组合输出
来源:互联网 发布:淘宝乔丹运动鞋男鞋 编辑:程序博客网 时间:2024/06/06 04:51
剑指Offer一书中面试题28求字符串的排列,给出了递归算法程序。其中扩展题目中提到了,求字符串的所有组合。比如输入字符串:“abc”,输出应为:a、b、c、ab、ac、bc、abc.
借用书上的解题思路:如果输入n个字符,则这n个字符能构成长度为1、长度为2、......长度为n的组合。在求长度为m的组合时,可考虑将这n个字符分成两部分:第一个字符和其余所有的字符。如果组合里包含第一个字符,则下一步在剩余的字符里选取m-1个字符;如果不包含第一个字符,则下一步在剩余的字符里选取m个字符。
思想比较简单巧妙,下面是我给出的实现代码:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
void Combine(int ilen,char* pStart,char* PEnd,string strBefore)
{
if (ilen<0||pStart+ilen-1>PEnd)
{
return;
}
else
{
if (pStart+ilen-1==PEnd)
{
if (!strBefore.empty())
{
cout<<strBefore;
}
printf("%s\n",pStart);
}
else
{
if (ilen==0)
{
if (!strBefore.empty())
{
cout<<strBefore;
cout<<endl;
}
}
else
{
Combine(ilen,pStart+1,PEnd,strBefore);//不包含第一个字母
strBefore.push_back(*pStart);
Combine(ilen-1,pStart+1,PEnd,strBefore);
}
}
}
}
void Combine(char* pStr,int ilen)
{
if (pStr==NULL||ilen<1)
{
return;
}
char* pEnd=pStr+ilen-1;
string strb;
for (int i=1;i<=ilen;i++)
{
if (!strb.empty())
{
strb.clear();
}
Combine(i,pStr,pEnd,strb);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char* str="abcd";
Combine(str,4);
return 0;
}
运行结果如图:
- 求字符串的所有组合输出
- 求字符串的所有组合
- 求字符串的所有组合
- 求字符串的所有组合
- 输出字符串的所有组合
- 求字符串所有组合
- 求字符串中元素的所有组合
- 字符串的所有可能组合输出
- C++实现求字符串的所有的组合
- 求一个字符串中所有字符的组合
- 求一个字符串中所有字符的组合
- 求一串字符串的全排列和所有组合
- 【剑指offer】面试题:求字符串的所有组合
- 输出该字符串中字符的所有组合
- 字符串之输出所有字母组合相同的单词
- 输出该字符串中字符的所有组合
- 读取一个字符串,输出它里面字符的所有组合
- 【Java笔试题】输出字符串的所有组合
- C#生产者与消费者问题(二)
- 奇思妙想:删除单链表的一个节点
- pat 1017. Queueing at Bank (25)
- tomcat虚拟路径的几种配置方法
- 如何判断Android手机当前是否联网
- 求字符串的所有组合输出
- BNU Flash Mob - from lanshui_Yang
- Linux下获取当前程序路径
- 黑马程序员-交通灯管理系统
- SQLServer 2008 FileStream简单实例
- ext3grep linux 恢复
- 2013年8月27日星期二(DEMO8_1,画线)
- IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题
- 需求分析挑战之旅(疯狂的订餐系统)(4)——没完没了的“新需求”