转自:http://blog.csdn.net/ns_code/article/details/26405471
剑指offer上的拓展题目,输入一个字符串,输出该字符串的字符的所有组合,比如输入字符串:abc,输出a、b、c、ab、ac、bc、abc。
可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m)。原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和。对于求C(n, m),从第一个字符开始扫描,每个字符有两种情况,要么被选中,要么不被选中,如果被选中,递归求解C(n-1, m-1)。如果未被选中,递归求解C(n-1, m)。不管哪种方式,n的值都会减少,递归的终止条件n=0或m=0。
思路二:
开辟一个于字符串对应长度的int数组(char数组也可以,而且更节省空间),用该数组模拟二进制的加1操作,则该数组的元素只能为0或1,我们规定如果该数组某个位置处的元素是1,则字符串对应位置处的字符参与组合,如果为0,则字符串对应位置处的字符不参与组合,这样讲该int数组,从全0加到全1,便可得到字符串的全部组合。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
bool increment(char *bindAdd,int len)
{
if(bindAdd==NULL)
return false;
bindAdd[len-1]++;
int i;
for(i=len-1;i>=0;i--)
{
if(bindAdd[i]>=2)
{
if(i==0)
{
bindAdd[i]--;
return false;
}
else{
bindAdd[i]-=2;
bindAdd[i-1]++;
}
}
else
break;
}
return true;
}
void comination(char *str)
{
if(str==NULL)
return;
int len=strlen(str);
char* bindAdd=(char*)malloc(len*sizeof(char));
if(bindAdd==NULL)
exit(EXIT_FAILURE);
memset(bindAdd,0,len*sizeof(char));
while(increment(bindAdd,len))
{
int i;
for(i=0;i<len;i++)
{
if(bindAdd[i]==1)
putchar(str[i]);
}
putchar('\n');
}
free(bindAdd);
bindAdd=NULL;
}
int main()
{
char str[10];
while(gets(str))
comination(str);
return 0;
}
结果:
分享到:
相关推荐
TIA 博途中字符串转换相关指令的使用方法是指在 Siemens SIMATIC TIA Portal 中使用的字符串转换相关指令,包括移动和转换字符串指令、字符串和数值相互进行转换指令等。 1. 移动和转换字符串指令 移动和转换字符...
这些函数可以用来拷贝字符串、拼接字符串、查找字符串中的字符、比较字符串等。 1. stpcpy 函数 stpcpy 函数的功能是拷贝一个字符串到另一个。它的用法是 `char *stpcpy(char *destin, char *source);`,其中 `...
【免费题库】华为OD机试 - 数字字符串组合倒序(Java & JS & Python & C & C++).html
标题 "输入一个字符串,输出所有该字符串的组合情况" 涉及的主要知识点是字符串处理和算法,特别是组合和排列的生成。在这个问题中,我们需要编写程序来生成一个给定字符串的所有可能的子序列或子字符串,这通常涉及...
从给定的代码片段来看,该程序旨在生成一个字符串的所有可能排列组合,但代码实现上存在一些问题,例如,函数命名、逻辑结构以及对内存管理的处理方式等,都偏离了标准的C语言编程实践。下面,我们将深入解析标题、...
Replace() 方法用于字符串中特定字符串组合的替换,即将源字符串中的所有 oldValue 字符串替换为 newValue 字符串。 6. Split() 方法 Split() 方法将字符串拆分为子字符串(如将句子拆分为各个单词)是一个常见的...
在字符串组合的问题中,我们可以考虑两种情况: 1. 不包含当前字符:我们需要在剩余的字符中找到m个字符的组合。 2. 包含当前字符:我们需要在剩余的字符中找到m-1个字符的组合。 这两种情况可以通过递归函数实现...
### MySQL 计算字符串相似度 #### 背景与需求 在许多应用场景中,我们...3. **缓存机制**:对于频繁查询的字符串组合,可以考虑使用缓存来提高性能。 通过以上方法,可以在保持准确性的同时提高相似度计算的效率。
1. **字符串连接**:在LabVIEW中,可以使用“连接字符串”函数来将两个或多个字符串组合成一个新的字符串。这个函数接受一个或多个字符串数组作为输入,并返回一个包含所有输入字符串的单一字符串。你可以通过拖拽此...
3. 将二进制字符串组合成一个整体的二进制字符串,确保字符顺序正确。 4. 将二进制字符串转换为Unicode编码,再将其解码为字符串,可以使用`chr()`函数(Python中)配合`unhexlify()`(Python的二进制操作)。 在...
虽然不如`Split`函数直接,但也可以通过`Mid`和`InStr`函数组合来实现字符串的拆分。`Mid`函数用于提取字符串的一部分,而`InStr`函数则用于查找子字符串在主字符串中的位置。以下是一个示例: ```vb Dim str As ...
- **定义**:`TYPE` 枚举定义了不同类型的字符串组合方式。 - **枚举值**: - `LETTER`:仅包含小写字母。 - `CAPITAL`:仅包含大写字母。 - `NUMBER`:仅包含数字。 - `SIGN`:仅包含特殊符号。 - `LETTER_...
字符串组合问题是指给定一个字符串和一个整数 m,输出该字符串中所有可能的长度为 m 的组合。例如,输入字符串 "abc" 和整数 2,输出所有可能的组合为 "ab"、"ac"、"bc"。 下面是一个 Java 实现字符串组合问题的...
在编程领域,字符串排列组合是一个常见的算法问题,它涉及到如何生成一个字符串的所有可能的排列方式。这个主题主要与计算机科学的算法设计和技术有关,尤其是在数据结构和算法分析的课程中经常遇到。本节将深入探讨...
在CODESYS编程环境中,CONCAT函数是一个非常实用的字符串处理函数,它用于将多个字符串连接成一个单一的字符串。在工业自动化领域,特别是在基于IEC 61131-3标准的编程中,理解并熟练运用CONCAT函数是至关重要的,...
最后,字符串连接,即把两个或多个字符串组合成一个新的字符串,通常由`strcat`或`strncat`完成。自定义实现可能会有一个`concatenate_strings`函数,它接受任意数量的字符串参数,将它们合并为一个。这种功能在需要...
可能包含各种不同大小写的字符串组合,以便确保函数在各种情况下的行为都是预期的。 而"char_comp"文件可能包含了实现该字符串匹配功能的源代码。通常,这种函数会接收两个字符串作为输入参数,并通过某种方式转换...
学习这些函数的组合使用,能提高在LabVIEW中处理字符串的效率和精度。 总结,LabVIEW中的“字符串拆分到数组”功能是通过“字符串到数组”函数实现的,它支持包括中文在内的各种字符。理解这个函数的工作原理和使用...
字符串模式匹配算法可以分为两大类:基于是自动机或字符串组合特点的算法和对文本建立索引的算法。本节课只讨论第一类字符串模式匹配算法。 第一类算法是基于这样一种方式来进行的:设想一个长度为 m 的窗口。首先...
- **字符到字符串数组**:如果你有字符数组,可以使用“字符数组到字符串”函数,将每个字符数组元素转换为单独的字符串,然后用“数组构造函数”组合它们。 4. **操作字符串数组**: - **数组操作函数**:...