Здравейте,
Дали някой случайно има примерно решение на задачата “Title search” и ако не му е проблем да
го качи , тъй като имам малки проблеми с нея ?
Благодаря предварително
Здравейте,
Дали някой случайно има примерно решение на задачата “Title search” и ако не му е проблем да
го качи , тъй като имам малки проблеми с нея ?
Благодаря предварително
Помня тази задача. И мен много ме беше измъчила. Ще потърся и ако го намеря, ще ти пратя решението.
Намерих го.
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();
}
}
}
Проучи го разбери как работят вътрешните цикли. Успех!
Извинете ме ако задавам глупав въпрос, но не разбирам условието докрай, а именно последния примерен Output: Input
cfoadset
2
code
slow
fast
No such title found!
Защо въпреки че се съдържа “s” във fast във примерния отговор се дава че не е намерено нищо? Може би аз не разбирам нещо … Също и Constraints
И аз това точно , изглежда , бях объркал в задачата.
Търси се цялата последователност от букви ( sequence) ,
а не да маха всяка повтаряща се буква.
И още нещо , което не трябва да се забравя е, че след всеки модифициран ред, работим с вече модифицирания а не с началния…
Здравей,
Ако може малко да ме просветиш, защо декларираш на две места променливи извън 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-то място напред. В противен случай ще ни даде неправилна последователност и грешен резултат.
Много багодаря за разяснението Ивайло,
сега всичко е ясно и си дойде на мястото.
Здравейте,
Видях примерното решение на задачата, но все пак искам да доразвия моя код, ако е възможно, за да бъде приета изцяло задачата.
Моля за проверка какво изпускам!
Към какво трябва да се насоча - според мен е решена правилно.
import java.util.Scanner;
public class Exercise43 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String longWord = s.nextLine();
String temp = longWord;
int N = Integer.parseInt(s.nextLine());
String[] words = new String[N];
for (int i = 0; i < N; i++) {
words[i] = s.nextLine();
}
for (String word : words) {
for (int i = 0; i < word.length(); i++) {
temp = temp.replaceFirst(Character.toString(word.charAt(i)), "");
}
if (temp.length() == (longWord.length() - word.length())) {
System.out.println(temp);
longWord = temp;
}else{
temp=longWord;
System.out.println("No such title found!");
}
}
}
}
Здравей, като насока не използвай replaceFirst() защото в тази задача не търсим само отделни букви/символи, а последователност (sequence )
Аз вземам една “дума-word”(от арея с думи) и заменям символите с празен символ, ако има еднакви в “израза-longWord” - след това проверявам дали всички символи са махнати(резултат-temp==longWord.length-word.length, ако не са следователно израза си остава същия.
Решението ми работи за първите три случая и за последните два!
За останалите 18 случая - не (там излиза отговор нещо такова: sdhfksjhdkfhlaskdhfkh).
Не разбирам какво трябва да променя - за да работят и останалите случай.
Значи ако първия символ е на 5та позиция - после трябва да започвам от 5та позиция натам?
Не може ако първата буква е на 5та позиция - следващата да е на позиция преди 5 ?
Това ли е проблема?
Здравей, да, точно така е, ако първата буква е на 5-та позиция, следващата трябва да започнеш да я търсиш от 5-та позиция нататък. Успех!
Благодаря ти!