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

时间:2015-10-06 10:19:36

标签: c++ templates c++11 stl

我们说我是一个字符串"12345"我应该获得此字符串的所有 1位数或相邻的2位数组合,例如:

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

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

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

1 个答案:

答案 0 :(得分: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;
}