Если у меня есть строка из 7 слов (I like it when it rains hard
), и я хочу напечатать все варианты, которые есть
а также
Как лучше всего это сделать? Ниже я расскажу о своей конечной цели:
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 = " ";
}
}
}
}
вы можете просто изменить внешнюю линию, как это for (int j = s.length - 1; j > i; j--) {//outer
вы также хотите выйти из последовательности слов? "Мне нравится, когда это" → "Мне нравится когда"?
Просто измените одно: во втором для цикла 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
Если количество слов в вашем предложении равно n, соберите все числа из 3 ниже 2 n, где количество бит (logcount
) равно как минимум 2.
Для каждого такого числа, рассматриваемого как поле бит, собирайте слова, в которых бит в этой позиции равен 1 в новое предложение.
Он печатает шаблон, однако я сомневаюсь в его сложности.
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();
}
}