Самый эффективный способ распечатать все варианты строки?

1

Если у меня есть строка из 7 слов (I like it when it rains hard), и я хочу напечатать все варианты, которые есть

  • a) Более двух слов

а также

  • b) Не изменять первоначальный порядок слов.

Как лучше всего это сделать? Ниже я расскажу о своей конечной цели:

 I like it when it rains hard 
 I like it when it rains 
 I like it when it 
 I like it when 
 I like it 
 I like 
 like it when it rains hard 
 like it when it rains 
 like it when it 
 like it when 
 like it 
 it when it rains hard 
 it when it rains 
 it when it 
 it when 
 when it rains hard 
 when it rains 
 when it 
 it rains hard 
 it rains 
 rains hard 

Моя программа почти достигла этого, но не совсем, и я задаюсь вопросом, есть ли более разумный способ решения проблемы, чем то, что у меня есть...?

//Strings.java
//Goal: to print out each possible version of data without changing the original   
//order and without printing strings of less than 2 words.

public class Strings  {

  public static void main (String[] args)  {

  String var = " ";
  String data = "I like it when it rains hard";

  String [] s = data.split(" ");

  for (int i = 0 ; i <= s.length-1 ; i++)  {  //inner

    for (int j = s.length-1 ; j >= 1 ; j--)  {  //outer

      for ( int num = i ; num <= j ; num++)  {  

          var += s[num] + " ";        
      }
       System.out.println(var);
       var = " ";
    }     
  }


  }
}
  • 3
    Самый эффективный в отношении чего? Использование процессора? Использование памяти? Потребление куки?
  • 2
    Вы заявляете, что ваше решение "не совсем" завершено. Почему ваше текущее решение не работает так, как вы ожидаете?
Показать ещё 7 комментариев
Теги:
string
arrays

4 ответа

0
Лучший ответ

вы можете просто изменить внешнюю линию, как это for (int j = s.length - 1; j > i; j--) {//outer

вы также хотите выйти из последовательности слов? "Мне нравится, когда это" → "Мне нравится когда"?

  • 0
    Нет, я не хочу из последовательности слов. спасибо за код: D
0

Просто измените одно: во втором для цикла j следует перейти к (i + 1), значит, j> = (i + 1),

 public class Strings  {

  public static void main (String[] args)  {

  String var = " ";
  String data = "I like it when it rains hard";

  String [] s = data.split(" ");

  for (int i = 0 ; i <= s.length-1 ; i++)  {  //inner

    for (int j = s.length-1 ; j >= i+1 ; j--)  {  //outer

      for ( int num = i ; num <= j ; num++)  {  

          var += s[num] + " ";        
      }
       System.out.println(var);
       var = " ";
    }     
  }


  }
}

И вы получаете тот же результат, что и вы

 I like it when it rains hard 
 I like it when it rains 
 I like it when it 
 I like it when 
 I like it 
 I like 
 like it when it rains hard 
 like it when it rains 
 like it when it 
 like it when 
 like it 
 it when it rains hard 
 it when it rains 
 it when it 
 it when 
 when it rains hard 
 when it rains 
 when it 
 it rains hard 
 it rains 
 rains hard 
0

Если количество слов в вашем предложении равно n, соберите все числа из 3 ниже 2 n, где количество бит (logcount) равно как минимум 2.

Для каждого такого числа, рассматриваемого как поле бит, собирайте слова, в которых бит в этой позиции равен 1 в новое предложение.

0

Он печатает шаблон, однако я сомневаюсь в его сложности.

    String line = "I like it when it rains hard";
    String[] tokens = line.split(" ");
    for (int i = 0; i < tokens.length; i++) {
        int len = tokens.length;
        for (int j = i + 1; j < len; len--) {
            System.out.print(tokens[i] + " ");
            for (int k = j; k < len; k++) {
                System.out.print(tokens[k] + " ");
            }
            System.out.println();
        }
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню