2013-03-09 2 views
3

Вот в конце концов, что мне нужно сделать:Как я могу отсортировать ArrayList на основе того, как действует другой ArrayList? (Java)

У меня есть ArrayList под названием originalList, который выглядит как [pans, pots, sit, it's, naps]

и другой ArrayList называется modifiedList, который принимает originalList и удаляет знаки препинания и прописные буквы, а затем сортирует список , Так было бы выглядеть так: [anps, anps, ist, ist, opst]

modifiedList Цель - рассказать мне, какие слова являются анаграммами друг друга. Анаграмма - это слово, состоящее из одних и тех же букв. Проблема в том, что мне нужно отсортировать originalList для соответствия modifiedList, чтобы я мог выводить, какие слова являются анаграммами друг друга. originalList должен стать [pans, naps, sit, it's, pots]. Предложения?

+1

Вы связаны с идеей использования двух ArrayLists (по домашнему заданию) или вы открыты для других идей? –

+0

Вы можете организовать 'originalList', когда будете готовить' modifiedList' себя –

+0

Мне нужно использовать ArrayList. Поверьте мне, я бы не стал, если бы мне не пришлось. – user2012751

ответ

5

Не используйте дополнительный список. Сортируйте исходный список с помощью компаратора, который «нормализует» два слова для сравнения, а затем сравнивает их нормализованные значения (путем нормализации, я имею в виду преобразование naps в anps).

После этого вы будете иметь свои анаграммы рядом друг с другом в списке.

+0

Но тогда он потеряет исходные значения, как он может выводить, какие слова являются анаграммами друг друга? –

+0

Нет, он ничего не потеряет. Исходные слова будут отсортированы по их нормализованным значениям. Таким образом, анаграммы будут рядом друг с другом в их первоначальном виде. Чтобы напечатать анаграммы, ему нужен только второй проход на отсортированном массиве и сравнить нормализованные значения слова в индексе i с нормализованным значением слова в индексе i + 1. Если целью является печать всех анаграмм, Однако я бы не использовал List, но «Map >», где ключ является нормализованным значением и значением, если список анаграмм имеет это нормализованное значение. –

1
public static void main(String args[]){ 
     ArrayList<String> alOriginal = new ArrayList<String>(); 
     alOriginal.add("pans"); 
     alOriginal.add("pots"); 
     alOriginal.add("sit"); 
     alOriginal.add("it's"); 
     alOriginal.add("naps"); 
     ArrayList<String> alAnagram = getSortedAnagramStrings(alOriginal); 
     System.out.println(alOriginal); 
     System.out.println(alAnagram); 
    } 
    public static java.util.ArrayList<String> getSortedAnagramStrings(ArrayList<String> original){ 
     ArrayList<String> alAnagramStrings = new ArrayList<String>(); 
     for (String currentString : original) { 
      // Remove punctuation 
      char[] anagramChars = currentString.replace("'", "").toCharArray(); 
      // Sort characters 
      Arrays.sort(anagramChars); 
      // Prepare string 
      String anagramString = new String(anagramChars); 
      // Add to array list 
      alAnagramStrings.add(anagramString); 
     } 
     // Simple sort logic 
     for (int index = 0; index < alAnagramStrings.size(); index ++){ 
      for (int index1 = index + 1; index1 < alAnagramStrings.size(); index1 ++){ 
       // If both anagram strings are same 
       if(alAnagramStrings.get(index).compareTo(alAnagramStrings.get(index1)) == 0){ 
        // Compare original strings 
        if (original.get(index).compareTo(original.get(index1)) > 0){ 
         String temp =original.get(index); 
         original.set(index, original.get(index1)); 
         original.set(index1, temp); 
        }else{ 
         String temp =original.get(index); 
         original.set(index1, original.get(index)); 
         original.set(index, temp); 
        } 
       }else if(alAnagramStrings.get(index).compareTo(alAnagramStrings.get(index1)) > 0){ 
        String temp =alAnagramStrings.get(index); 
        alAnagramStrings.set(index, alAnagramStrings.get(index1)); 
        alAnagramStrings.set(index1, temp); 
        String temp1 =original.get(index); 
        original.set(index, original.get(index1)); 
        original.set(index1, temp1); 
       } 
      } 
     } 
     return alAnagramStrings; 
    } 
Смежные вопросы