码迷,mamicode.com
首页 > 其他好文 > 详细

字符交替

时间:2015-04-28 14:13:56      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:面试题   算法   计算机   编程   递归   

字符交替:给出两个字符串打印出所有由这两个字符串交替组成的字符串,要求维持原有字符的相对顺序

举例:

输入“AB”和“CD”

输出:

ABCD

ACBD

ACDB

CABD

CADB

CDAB

分析:

1、当S1和S2均无字符可用时,则返回空串。

2、当其中一个无字符可用,比如S1剩余字符为空,那么把S2剩余字符附在已经得到的字符组合后面,并输出结果。

3、其他情况,我们可以从S1取一个字符,或者可以从S2中取一个字符,保存已得到的字符组合,然后递归调用函数。

为了方便,可以使用string类

at()

//C++ 更安全的向量元素访问方式 | C++ at()成员函数【C++ 用at()成员函数访问向量元素,是一种安全的访问方式,可以有效地避免错误代码的继续执行】
//以下程序使用at()成员函数访问向量元素,是一种安全的访问方式,可以有效地避免错误代码的继续执行
string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串。

#include <string>  
#include <iostream>  
  
using namespace std;  
  
void printInternal(string &S1, string &S2, string soFar)  
{  
    if ((S1.size() == 0) && (S2.size() == 0))  
        return;  
      
    if (S1.size() == 0)  
    {  
        cout << soFar+S2 << endl;  
        return;  
    }  
  
    if (S2.size() == 0)  
    {  
        cout << soFar+S1 << endl;  
        return;  
    }  
  
    printInternal(S1.substr(1, S1.size()-1), S2, soFar+S1.at(0));  
    printInternal(S1, S2.substr(1, S2.size()-1), soFar+S2.at(0));  
  
  
}  
  
void printInterleavings(string &S1, string &S2)  
{  
    printInternal(S1, S2, "");  
}  
  
  
int main()  
{  
    string s1 = "AB";  
    string s2 = "CD";  
    printInterleavings(s1, s2);    
    return 0;  
}  





字符交替

标签:面试题   算法   计算机   编程   递归   

原文地址:http://blog.csdn.net/u014082714/article/details/45334171

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!