Как проверить, где находится входное слово с точки зрения диапазона слов? - PullRequest
0 голосов
/ 19 сентября 2019

Как проверить, находится ли входное слово «до», «внутри» или «после» заданного «диапазона слов»?Для каждого входного слова нам просто нужно вывести "before", "inside" or "after" ..

Чтобы определить порядок, правило приоритета символа: '' < 'A' < 'a' < 'B' < 'b' .. 'Z' < 'z'.

Format of input is:
1) <start word> <end word>
2) A sequence of N words

Например:

Input:
============
Apple Pear
Aa
Aq
App
Apple

Output:
============
before // as Aa < Apple
inside // as Aq > Apple && Aq < Pear
before // as App < Apple
inside // as Apple == Apple && Apple < Pear

Ниже приведено то, что у меня есть, но оно дает неправильный вывод, поэтому моя логика сравнения выглядит неправильно.

public static void main(String args[] ) throws Exception {
    Scanner sc = new Scanner(System.in);
    String startWord =  sc.next(); // this will give "Apple"
    String endWord =  sc.next(); // this will give "Pear"
    while (sc.hasNext()) {
       // below will give "Aa", or "Aq", or "App" or "Apple" one by one
        String queryWord =  sc.next();
        if(queryWord.compareTo(startWord) < 0 && queryWord.compareTo(endWord) < 0) {
            System.out.println("before");
        } else if(queryWord.compareTo(startWord) > 0 && queryWord.compareTo(endWord) > 0) {
            System.out.println("after");
        } else if(queryWord.compareTo(startWord) == 0 && queryWord.compareTo(endWord) == 0) {
            System.out.println("inside");
        }
    }
    sc.close();
}

Update:

Так что логика будет такой?

    while (sc.hasNext()) {
        String queryWord =  sc.next();
        int qValue = 0;
        for(char c : queryWord.toCharArray()) {
            qValue += map.get(c);
        }
        if(qValue > sValue && qValue < eValue) {
            System.out.println("inside");
        } else if(qValue > sValue && qValue > eValue) {
            System.out.println("before");
        } else {
            System.out.println("after");
        }
    }

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

давайте предположим, что это числовая строка, в которой первое слово находится в точке X, а второе слово в точке y.

Что касается вопроса, нам нужно указать, что входное слово лежит ниже x, между xи у или за его пределами y.


Теперь возникает вопрос, как будет происходить сравнение для разных слов?

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

  1. Aa
  2. Aq> Apple - потому что 2-й «q» в «Aq» будетлежат за 2-ой «p» в «Apple» в числовой строке.
  3. App

    public static void main (String args []) {

    Scanner sc = new Scanner(System.in);
    String startWord = sc.next(); // this will give "Apple"
    String endWord = sc.next(); // this will give "Pear"
    
    while (sc.hasNext()) {
        String queryWord = sc.next();
    
        if (compare_str(queryWord, startWord) < 0 && compare_str(queryWord, endWord) < 0) {
            System.out.println("before");
        } else if (compare_str(queryWord, startWord) > 0 && compare_str(queryWord, endWord) > 0) {
            System.out.println("after");
        } else if (compare_str(queryWord, startWord) >= 0 && compare_str(queryWord, endWord) <= 0) {
            System.out.println("inside");
        }
    }
    
    sc.close();
    

    }

Я разработал пользовательскую функцию сравнения, которая сравнивает строку и возвращает статус в виде 1,0, -1.

public static int compare_str(String a, String b) {
    int len = Math.min(a.length(), b.length());

    for (int i = 0; i < len; i++) {
        if (a.charAt(i) == b.charAt(i))
            continue;
        if ((a.charAt(i) > b.charAt(i)))
            return 1;
        else
            return -1;
    }

    if (b.length() > a.length())
        return -1;
    if (b.length() < a.length())
        return 1;

    return 0;
}

Надеюсь, этот фрагмент кода будет полезным.

0 голосов
/ 19 сентября 2019

Прежде чем опубликовать решение, давайте взглянем на диапазон ввода.

каждая буква слова будет чем-то внутри [A, Z] или [az].

Теперьниже приведена логика, которую я хотел бы использовать, чтобы вычислить, является ли данный вход - before, inside или outside.

1. Let's initialize two variables - startWord and endWord.
2. Take input for the above two variables.
3. Now, I create a map which stores value for each letter constant. As per the question, my values will look something like this:-
   A - 1
   a - 2
   B - 3
   b - 4
   .
   .
   Z = 51
   z = 52.
4. Now I will calculate value of each word, so for example, value of Apple will be = A+p+p+l+e = 1+32+32+24+10 = 99.
5. Similarly I will do for Pear.
6. Now for each user input value, for example Aa. I will make this calculation again, so for Aa its = A+a = 1+2 = 3. And 3 is less then 99. 
7. Now it all comes to Maths, if this value is within the range of startWord and endWord, then I print inside, if its less then answer is before otherwise after.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...