Вам необходимо снова сопоставить поменяемые строки, чтобы соответствовать критериям but if a string is present completely as a prefix in another string, then string with longer length should come first
. Сделайте это, используя String :: regionMatches (int offset, String other, int ooffset, int len) , как показано ниже:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] strArr = new String[n];
for (int j = 0; j < strArr.length; j++) {
strArr[j] = sc.next();
}
for (int i = 0; i < strArr.length - 1; ++i) {
for (int j = i + 1; j < strArr.length; ++j) {
if (strArr[i].compareTo(strArr[j]) > 0) {
swap(strArr, i, j);
}
if (strArr[j].regionMatches(0, strArr[i], 0, strArr[i].length())) {
swap(strArr, i, j);
}
}
}
for (int i = 0; i < strArr.length; i++) {
System.out.println(strArr[i]);
}
}
static void swap(String[] strArr, int i, int j) {
String temp = strArr[i];
strArr[i] = strArr[j];
strArr[j] = temp;
}
}
Пример выполнения:
3 bat apple batman
apple
batman
bat