题目
给定两个字符串,大于出所有由这两字符交替组成的字符串。
要求维持原来字符的顺序不变
算法
例如:输入“AB”和“CD”,则打印
ABCD
ACBD
ACDB
CABD
CADB
CDAB
(1) s1和s2均无字符可用,则返回空串
(2) 其中一个空字符可用,s1剩余字符为空,那么把s2的剩余字符附在已经得到的字符串的后面,输出
(3)其他,或者从s1取字符,或者从s2取字符,保存已得到的字符,然后递归调用函数
import java.util.*;
public class Solution{
public void printInterleavings(String s1,String s2){
printInterleavings(s1,s2,"");
}
private void printInterleavings(String s1,String s2,String soFar){
if((s1==null ||s1.length()==0) && (s2==null ||s2.length()==0))
return;
if(s1==null || s1.length()==0){
//s1为空,输出结果加上s2
System.out.println(soFar +s2);
return;
}
if(s2==null||s2.length()==0){
//s2为空,输出结果加上s1
System.out.print(soFar+s1);
return;
}
//加上s1的一个字符
printInterleavings(s1.substring(1),s2,soFar+s1.charAt(0));
//加上s2的一个字符
printInterleavings(s1,s2.substring(1),soFar+s2.charAt(0));
}
}