使用递归Java从两个字符串(交错)中打印交替的字符

时间:2009-11-13 03:09:04

标签: string recursion

我正在尝试编写一种方法,该方法使用递归来打印由“交错”字符串str1和str2形成的字符串。换句话说,它应该替换两个字符串中的字符:str1中的第一个字符,str2中的第一个字符,str1中的第二个字符,str2中的第二个字符,等等。

我该怎么做?

4 个答案:

答案 0 :(得分:3)

递归的一般概念是有一个终止位置,它返回某种常量值,然后每个其他情况建立在它之上。

例如,阶乘函数f(n) = n * (n-1) * (n-2) * ... * 2 * 1具有以下终止条件和相关函数:

f(1) = 1
f(n) = n * f(n-1) for all n > 1

所以可以实现为:

def factorial(n):
    if n == 1:
        return 1;
    return n * factorial(n-1)

在您的特定情况下,终止条件是当任一字符串为空时,此时您只需将另一个字符串添加到结尾。依赖函数只是从第一个字符串中获取第一个字符,然后调用下一个级别向下传递该字符串的其余部分,另一个字符串但是以相反的顺序,以便您交替。

def mix (s1, s2):
    if s1 == "" return s2
    if s2 == "" return s1
    return s1.firstChar() + mix (s2, s1.allButFirstChar());

在Java中,这将转化为以下内容。请注意,如果这是家庭作业并且你使用它,你几乎当然失败,因为你认为你的教育工作者没有监控这些网站是愚蠢的。

public class Demo {
    public static String Mix (String s1, String s2) {
        if (s1.length() == 0) return s2;
        if (s2.length() == 0) return s1;
        return s1.substring(0,1) + Mix (s2, s1.substring(1));
    }
    public static void main(String[] args) {
        System.out.println (Mix ("Hello", "There"));
        System.out.println (Mix ("Hi", "There"));
        System.out.println (Mix ("Hello again", "Pax"));
        System.out.println (Mix ("", ""));
        System.out.println (Mix ("1111", ""));
        System.out.println (Mix ("111", "2"));
        System.out.println (Mix ("111", "22"));
        System.out.println (Mix ("111", "222"));
        System.out.println (Mix ("111", "2222"));
        System.out.println (Mix ("11", "2222"));
        System.out.println (Mix ("1", "2222"));
        System.out.println (Mix ("", "2222"));
    }
}

输出:

HTehlelroe
HTihere
HPealxlo again

1111
1211
12121
121212
1212122
121222
12222
2222

答案 1 :(得分:2)

这应该有效:

public String Interleave( String first, String second )
{
   if ( first.length() == 0 )
      return second;
   if ( second.length() == 0 )
      return first;
   return first.substring(0,1) + second.substring(0,1) +
      Interleave( first.substring(1), second.substring(1) );
}

答案 2 :(得分:0)

这是codingBat/String-2/mixString问题,除了您需要递归解决方案。

我的解决方案与Kieveli的解决方案基本相同:

public String mixString(String a, String b) {
  return 
    a.isEmpty() ? b :
    b.isEmpty() ? a :
    a.substring(0, 1) + b.substring(0, 1)
      + mixString(a.substring(1), b.substring(1));
}

答案 3 :(得分:-1)

    String s1="12345";
    String s2="67890";


    char ch1[]  = s1.toCharArray();
    char ch2 [] = s2.toCharArray();

    char[] ch3 = new char[10];
   // System.out.println("ch1"+ch1);

    for(i=0;i<10;i++)
    {
        ch3[i*2]=ch1[i];

        ch3[i*2+1]=ch2[i];
        System.out.println("ttttttttttt");
         System.out.println(ch3[i]);
    }