如何获取字符串的所有 1 位或相邻的 2 位组合

Posted

技术标签:

【中文标题】如何获取字符串的所有 1 位或相邻的 2 位组合【英文标题】:How to obtain all 1 digit or adjoining 2 digit combinations of a string 【发布时间】:2015-10-06 10:19:35 【问题描述】:

假设我有一个字符串"12345",我应该获取该字符串的所有1 位或相邻的2 位组合,例如:

1 2 3 4 5
12 3 4 5
1 23 45 
12 3 45 
12 34 5 
...

请注意,我将它们分组为不同数量的字符,但没有更改它们的顺序。我需要一个方法/函数来做到这一点。

关于如何实现这一点的任何想法。

【问题讨论】:

不应该太难——到目前为止你尝试了什么? 一个非常标准的递归算法应该在这里工作。 使用regices 似乎有点矫枉过正——有更简单的方法。 正如@Phylogenesis 所说,考虑一种递归方法 - 从字符串中获取前一个或两个字符,然后针对这两种情况中的每一种递归处理剩余部分。 那么,为什么不简单地运行一个循环并提取两个附近的数字,然后分别提取所有单个数字呢? 【参考方案1】:

你可以用递归的方式来做。让我们将Ln 定义为计算我们可以通过这种方式将字符拼凑在一起的所有方式的函数。想象一下你在最后一个角色。你有两个选择,要么单独使用这个字符,所以我们剩下Ln-1 剩下的方法,或者使用这个字符和它之前的一个,所以我们留下Ln-2 字符。使用这种方法,我们可以编写如下代码:

void go(int i, const string &s, string res)
    if (i == s.length()) 
        cout << res << endl;
        return;
    

    go(i + 1, s, res + s[i] + " ");
    if (i + 1 < s.length())
        go(i + 2, s, res + s[i] + s[i + 1] + " ");


int main()

    string s = "1234";
    go(0, s, "");
    return 0;

【讨论】:

以上是关于如何获取字符串的所有 1 位或相邻的 2 位组合的主要内容,如果未能解决你的问题,请参考以下文章

Perl:如何将字符串的最后 n 位与 n 位或更多位连续匹配?

如何使用 R 获得相邻的组合对?

字符编码

ASCII码详解

使列表中的所有数字成为3位数字[重复]

java保留2位或n位小数