尝试以递归方式打印特定srtring的所有子字符串,而根本不使用循环

时间:2017-01-20 11:01:23

标签: java recursion backtracking

我试图在没有帮助或没有使用循环的情况下递归地打印字符串的所有子字符串。例如,如果字符串=" home" 它应该打印:

 h o m e ho hm he hom hoe hme om oe ome me home

如果是" bye"它应该打印:

 b y e by be ye bye

我只能执行以下代码:

public static void printSubs(String s){
    printSubs(s, "", 0, 0, s.length());
}

private static void printSubs(String s, String str, int i, int j, int length){
    if(i<length && j<length){
        if(j<s.length()){
            if(i==j)
                System.out.print(s.charAt(i)+" ");
            if(i<j){
                str+=s.charAt(i)+""+s.charAt(j);
                System.out.print(str+" ");
            }
            printSubs(s, "", i, j+1, length);
        }
        if(j==s.length()-1){
            printSubs(s.substring(i), "", i+1, i+1, length);
        }
    }
}

我的代码出了什么问题?它只打印:

h ho hm he o om oe e 

谢谢

1 个答案:

答案 0 :(得分:0)

我认为您的代码中的主要问题是您根本不使用缓冲区str,因此,您要打印的所有字符串将仅由2个字符组成:{{1} }(+ =在这里没用,因为在你的代码str = s.charAt(i) + "" + s.charAt(j);每次迭代)。但我认为使用缓冲是一个想法,你只需要弄清楚如何使用它。

我认为另一个问题是你的最后一次电话str == ""非常混乱。
•你要么subs subs&#34; s&#34;然后设置printSubs(s.substring(i), "", i+1, i+1, length);i = O从这个子字符串开始重新启动,而不要忘记j = 0结束它。
•或者增加索引(i和j)并保留完整的字符串。