Сортировка списка подстрок по порядку их появления в оригинале

1

Я использовал сортировщик для сортировки массива по длине подстрок. Он работает хорошо, но есть ли способ упорядочить подстроки одинаковой длины в массиве, в идеале в том порядке, в котором они появляются в исходной строке? Например, если я сортирую подстроки банана, я получаю: банан, анана, банан, бана, нана, анин... в этом порядке и хотел бы получить: банан, банан, анана, бана, анана, нана... который это то, как они изначально появляются в банане.

Как заполняется массив:

    public static String longestRepeated(String line) {
HashMap<String, Integer> subArray = new HashMap<String, Integer>();
String answer = "";
for (int i = 0; i < line.length(); i++) {
    for(int j = 1 ; j <= line.length() - i ; j++) {
        if (!subArray.containsKey(line.substring(i, i + j))) {
    subArray.put(line.substring(i, i + j), i);
    }
}
}
answer = subArray.keySet().toString();
answer = answer.replaceAll("\\[", "");
answer = answer.replaceAll("\\]", "");
String[] subs = answer.split(",");
LongestRepeatedSubstring lrs = new LongestRepeatedSubstring(line);
Arrays.sort(subs, lrs);
for (int i = 0 ; i < subs.length; i++) {
    subs[i] = subs[i].trim();
}

компаратор:

    int lineLength;

public int compare(String str1, String str2) {
    int dist1 = Math.abs(str1.length() - lineLength);
    int dist2 = Math.abs(str2.length() - lineLength);
    return dist1 - dist2;
}
public LongestRepeatedSubstring(String line) {
    super();
    this.lineLength = line.length();
}

Затем я использую некоторые циклы, чтобы найти первый, который повторяется, а не тот же индекс. Проблема возникает в случаях, когда в массиве той же длины имеется несколько повторяющихся подстрок. Мне нужен тот, который сначала появляется в строке, и они появляются в массиве случайным образом.

  • 1
    не могли бы вы сделать ваш вопрос более читабельным? :) Можете ли вы показать, что вы сделали, или какую-либо ошибку вы получите?
  • 1
    Разместите свой код, поскольку неясно, какой у вас массив (если есть) и как он был сгенерирован.
Показать ещё 7 комментариев
Теги:
comparator
substring

2 ответа

0

Кажется, вам не нужен компаратор: просто распечатайте все подстроки

0

Я действительно не понимаю то, что вы просите, но я думаю, что вы пытаетесь сказать, что если есть способ снова стать кемпаном внутри компаратора. Правильно? Если это так, вот пример:

public static Comparator<String> CompareBySomeRestrictionAndOtherRestriction = new Comparator<String>(){
    public int compare(String s, String p){
         if(){//first condition, for example some strings are the same size
              //then use some other criteria, for example alphabetical order
         }else{

         }   
    }

}

Вам просто нужно поработать над тем, как вы управляете сравнениями, чтобы достичь того, чего вы хотите.

Ещё вопросы

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