Код: Выделить всё
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
* @author sabertooth
*/
public class SortString {
/**
* @param args the command line arguments
*/
private static char[] index;
private static BufferedReader br;
public static void main(String[] args) throws Exception {
// TODO code application logic here
br = new BufferedReader(new InputStreamReader(System.in));
int testCases = Integer.parseInt(br.readLine());
for (int i = 0; i < testCases; i++) {
String dictionary = br.readLine();
index = new char[dictionary.length()];
index = dictionary.toCharArray();
int set = Integer.parseInt(br.readLine());
String[] unsortedInput = new String[set];
String[] sortedInput = new String[set];
for (int j = 0; j < set; j++) {
unsortedInput[j] = br.readLine();
}
if (unsortedInput.length 0) {
if (leftList.size() > 0 && rightList.size() > 0) {
// my own comparison
if (compare(leftList.get(0), rightList.get(0)) == -1) {
// leftString is less than right string
result.add(leftList.get(0));
leftList = leftList.subList(1, leftList.size());
} else
if (compare(leftList.get(0), rightList.get(0)) == 1) {
//left string is greater than right string
result.add(rightList.get(0));
rightList = rightList.subList(1, rightList.size());
} else
if (compare(leftList.get(0), rightList.get(0)) == 0) {
// leftString is equal to right string
result.add(leftList.get(0));
leftList = leftList.subList(1, leftList.size());
}
} else
if (leftList.size() > 0) {
for (int i = 0; i < leftList.size(); i++) {
result.add(leftList.get(i));
}
leftList.clear();
} else
if (rightList.size() > 0) {
for (int i = 0; i < rightList.size(); i++) {
result.add(rightList.get(i));
}
rightList.clear();
}
}
String[] sortedInput = new String[result.size()];
for (int i = 0; i < result.size(); i++) {
sortedInput[i] = result.get(i);
}
return sortedInput;
}
private static int compare(String leftString, String rightString) {
// return -1 if left string is less than right string else left string is greater than right string return 1
int min = Math.min(leftString.length(), rightString.length());
int response = 0;
for (int i = 0; i < min; i++) {
if (compareChar(leftString.charAt(i), rightString.charAt(i)) == -1) {
response = -1;
break;
} else
if (compareChar(leftString.charAt(i), rightString.charAt(i)) == 1) {
response = 1;
break;
} else
if (compareChar(leftString.charAt(i), rightString.charAt(i)) == 0) {
response = 0;
}
}
return response;
}
private static int compareChar(char x, char y) {
// returns true if x < y
int indexofx = 0;
int indexofy = 0;
int response = 0;
for (int i = 0; i < index.length; i++) {
if (index[i] == x) {
indexofx = i;
}
if (index[i] == y) {
indexofy = i;
}
}
if (indexofx < indexofy) {
response = -1;
} else
if (indexofx > indexofy) {
response = 1;
} else
if (indexofx == indexofy) {
response = 0;
}
return response;
}
}
РЕДАКТИРОВАНИЕ:
< blockquote>
Адриана играла с английским алфавитом. Когда она закончила играть с алфавитом, она поняла, что перепутала буквы. Теперь, имея набор слов, она задавалась вопросом, каким будет словарный порядок этих слов на основе нового порядка алфавита, который она создала.
Другими словами, учитывая перестановки английского алфавита E и набора слов S, вам необходимо вывести лексикографический порядок слов в наборе S на основе нового алфавита E.
Ввод:
Первая строка будет содержать одно целое число T, обозначающее количество тестовых случаев. Далее следуют T-строки.
Для каждого тестового примера:
Первая строка будет содержать строку E, новый порядок алфавита, который будет перестановкой abcdefghijklmnopqrstuvwxyz
Следующая строка будет содержать одно целое число M, размер набора S. Далее следуют строки S. , каждое из которых содержит одно слово, содержащее строчные латинские символы.
Вывод: для каждого тестового примера выведите S строк, каждая строка содержит одно слово из набора S, упорядоченное лексикографически. .
Ограничения
Код: Выделить всё
1
Подробнее здесь: [url]https://stackoverflow.com/questions/21215893/sorting-strings-in-custom-lexicographic-order[/url]
Мобильная версия