сортировать строку в алфавитном порядке, но если строка присутствует полностью как префикс в другой строке, то строка с большей длиной должна стоять на первом месте - PullRequest
1 голос
/ 21 апреля 2020

Вопрос. Сортируйте строку в алфавитном порядке, но если строка присутствует полностью как префикс в другой строке, то строка с большей длиной должна стоять на первом месте. Например, bat, batman - это две строки, а строка bat присутствует в качестве префикса в Batman - тогда должен быть отсортированный порядок - Batman, bat.

вот код - может кто-нибудь сказать мне, что я должен сделать для проверки если строка присутствует полностью как префикс в другой строке, и выполните сортировку соответственно.

Input-

3
bat
apple
batman

Output-

apple
batman
bat

Мой код :

import java.util.*;
public class sortStrings {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] str = new String[n];
        for(int j=0;j<str.length;j++)
        {
             str[j] = sc.next();
        }
        for(int i=0;i<str.length-1;++i)
        {
            for(int j=i+1;j<str.length;++j)
            {
                if(str[i].compareTo(str[j])>0)
                {
                String temp = str[i];
                str[i]=str[j];
                str[j]=temp;
                }
            }
        }
        for(int i=0;i<str.length;i++)
        {
            System.out.println(str[i]);
        }
    }


}

Ответы [ 2 ]

1 голос
/ 21 апреля 2020
public static void main(String[] args) {
    Comparator<String> comparator = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            if(o1.toLowerCase().startsWith(o2.toLowerCase())) {
                return -1;
            }
            if(o2.toLowerCase().startsWith(o1.toLowerCase())) {
                return 1;
            }

            return o1.compareTo(o2);
        }
    };

    String[] str = {"apple", "batman", "bat", "mangoman","mango","super","superman"};
    Arrays.sort(str, comparator);
    System.out.println(Arrays.asList(str));
}

выход

[apple, batman, bat, mangoman, mango, superman, super]
0 голосов
/ 21 апреля 2020

Вам необходимо снова сопоставить поменяемые строки, чтобы соответствовать критериям 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...