面试:字符串: 字符交替

题目

给定两个字符串,大于出所有由这两字符交替组成的字符串。
要求维持原来字符的顺序不变


算法

例如:输入“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));
    }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值