如何找到所有不同的组合作为一个字符串的字符的不同长度的单位
How to find all the different combinations as units of different lengths of the characters of a string
嗨,我想从给定字符串中找到所有不同的组合,而不是线性选择字符,而不会失去作为不同大小单位的序列。例子:
让我们说一个词"HAVING"
然后它可以有组合,如(空格分隔单个单位)
HA VI N G
HAV ING
H AV I N G
HAVIN G
H AVING
H AVIN G
HA VING
H AVI NG
....
像这样选择不同长度的单位。
谁能给一个原型代码或算法的想法。
谢谢,Kalyana
在大小为n的字符串中,您有n-1位置可以放置空格(=在每对连续字母之间)。因此,您有2^(n-1)
选项,每个选项由具有n-1位的二进制数表示,例如,您的第一个示例将是01011
。
这应该给你足够的信息开始(没有完整的解决方案;
简单递归解。两组是第一个字母和单词的其余部分。找出单词其余部分的所有组合。然后把第二个字母和第一个字母放在一起,找出单词其余部分的所有组合。重复,直到剩下的单词是1个字母。
这只是一个幂集,不是吗?对于字符串中两个字母之间的每个位置,有或没有空格。所以对于长度为6的字符串,有2的5次方种可能性。
一个简单的递归函数将列举所有的可能性。你需要帮助编写这样的函数还是你只是在寻找算法?每个字母之间要么有分隔符,要么没有。所以递归遍历单词,尝试所有分隔符/非分隔符的组合。
function f( word )
set = word[0] + f( substring(word, 1) )
set += word[0] + " " + f( substring(word, 1) )
return set;
我的解决方案
比如
void func(string s)
{
int len=s.length();
if(len==0)
return;
for(int i=1;i<=len;i++)
{
for(int j=0;j<i;j++)
cout<<s[j];
cout<<" ";
func(s[i]);
}
return;
}
递归。在java:
public static List<List<String>> split (String str) {
List<List<String>> res = new ArrayList<List<String>>();
if (str == null) {
return res;
}
for (int i = 0; i < str.length() - 1; i++) {
for (List<String> list : split(str.substring(i + 1))) {
List<String> tmpList = new ArrayList<String>();
tmpList.add(str.substring(0, i + 1));
for (String s : list) {
tmpList.add(s);
}
res.add(tmpList);
}
}
List<String> tmpList = new ArrayList<String>();
tmpList.add(str);
res.add(tmpList);
return res;
}
public static void main(String[] args) {
for (List<String> intermed : split("HAVING")) {
for (String str : intermed) {
System.out.print(str);
System.out.print(" ");
}
System.out.println();
}
}
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何检查一个c++字符串中有多少相同的字符/数字
- 获取用C/C++打印的最后一个字符串
- cin >> int 给定一个字符串将 int 赋值为 0
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 使用另一个字符串从字符串中删除空格
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- C++为 void 指针分配一个字符串
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 如何在另一个字符串的x位置插入一个字符串?
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 在另一个字符串中插入文件扩展名之前的字符串
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- C++自定义流操纵器,用于更改流上的下一个字符串
- 从类返回一个字符串 — 奇怪的行为
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- 你能从"volatile const char*"构造一个字符串吗?(不使用`const_cast`