2017-01-20 2 views
0

Я пытаюсь распечатать все подстроки строки рекурсивно без помощи или без использования циклов вообще. например, если строка = «домашнего» он должен напечатать:пытается распечатать все подстроки определенного srtring рекурсивно без использования циклов вообще

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

, если он был «до свидания» он должен напечатать:

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

Почему вы не используете 's.toCharArray()' или 's.chars()' и смешиваете все эти символы, как хотите? – Roland

+1

Почему «без петель»? –

ответ

0

Я думаю, что главная проблема в вашем коде является то, что вы не используете буфер str вообще, следовательно, вся строка будет печататься будет состоять только по 2 символа: str = s.charAt(i) + "" + s.charAt(j); (+ = бесполезно здесь, потому что в вашем коде str == "" каждая итерация). Но я думаю, что использование буфера - идея, вам просто нужно выяснить, как ее использовать.

Другая проблема, я думаю, это ваш последний звонок printSubs(s.substring(i), "", i+1, i+1, length);, который очень грязный.
• Либо вы подстроки «s», и вы установили i = O и j = 0 для перезапуска с начала с помощью этой подстроки, не забывая, что length = length -1 для этого.
• Или вы увеличиваете свои индексы (i и j) и сохраняете свою полную строку.

Смежные вопросы