Mock Exam 4 Problem 3 Title search (Java)

Здравейте,

Дали някой случайно има примерно решение на задачата “Title search” и ако не му е проблем да
го качи , тъй като имам малки проблеми с нея ?
Благодаря предварително :slight_smile:

Помня тази задача. И мен много ме беше измъчила. Ще потърся и ако го намеря, ще ти пратя решението.

1 Like

Намерих го.


import java.util.Scanner;

public class MockExam4_3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] thePhrase = scanner.nextLine().split("");
        int num = Integer.parseInt(scanner.nextLine());
        String[] allWords = new String[num];
        for (int i = 0; i < num; i++) {
            allWords[i] = scanner.nextLine();
        }
        for (String word : allWords) {
            String[] letters = word.split("");

            int j = 0;
            int count = 0;

            for (int i = 0; i < letters.length; i++) {
                boolean letterFound = false;
                for (; j < thePhrase.length; j++) {
                    if (letters[i].equals(thePhrase[j])) {
                        count++;
                        j++;
                        letterFound = true;
                        break;
                    }
                }
                if (!letterFound) {
                    break;
                }
            }

            if (count < letters.length) {
                System.out.println("No such title found!");
                continue;
            }


            j = 0;
            if (count == letters.length) {
                for (int i = 0; i < letters.length; i++) {
                    for (; j < thePhrase.length; j++) {
                        if (letters[i].equals(thePhrase[j])) {
                            thePhrase[j] = "#";
                            j++;
                            break;
                        }
                    }
                }
            }


            for (int i = 0; i < thePhrase.length; i++) {
                if (thePhrase[i].equals("#")) {
                    continue;
                }
                System.out.print(thePhrase[i]);
            }
            System.out.println();

        }
    }
}

Проучи го разбери как работят вътрешните цикли. Успех!

3 Likes

Извинете ме ако задавам глупав въпрос, но не разбирам условието докрай, а именно последния примерен Output: Input

cfoadset
2
code
slow

Output

fast
No such title found!

Защо въпреки че се съдържа “s” във fast във примерния отговор се дава че не е намерено нищо? Може би аз не разбирам нещо … Също и Constraints

  • 3 <= N <= 10 а има 2 примера, в които N = 2, много благодаря предварително!

И аз това точно , изглежда , бях объркал в задачата.
Търси се цялата последователност от букви ( sequence) ,
а не да маха всяка повтаряща се буква.
И още нещо , което не трябва да се забравя е, че след всеки модифициран ред, работим с вече модифицирания а не с началния…

1 Like

@npstaykov Много благодаря за отговора!

1 Like

Здравей,

Ако може малко да ме просветиш, защо декларираш на две места променливи извън for loop и добавяш итерация а не в скобите.
например тук
j = 0;
if (count == letters.length) {
for (int i = 0; i < letters.length; i++) {
for (; j < thePhrase.length; j++) {
if (letters[i].equals(thePhrase[j])) {
thePhrase[j] = “#”;

не мога да схвана причината, но отчитам разликата в крайния резултат.

Благодаря

Привет,
целта на извеждането на итератора пред външния цикъл е той да не се занулява. Ползата от това е, че ако сме намерили дадена буква примерно на 4-то място, следващата буква да се търси от 5-то място напред. В противен случай ще ни даде неправилна последователност и грешен резултат.

1 Like

Много багодаря за разяснението Ивайло,

сега всичко е ясно и си дойде на мястото. :slight_smile: