Что не так с моей программой извлечения содержимого тегов в Java (hackerrank)?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Что не так с моей программой извлечения содержимого тегов в Java (hackerrank)?

Сообщение Anonymous »

Мой код проходит первые два тестовых примера, но не справляется с третьим. Может кто-нибудь помочь?

Ссылка: https://www.hackerrank.com/challenges/t ... -extractor

Постановка задачи:

В языках на основе тегов, таких как XML или HTML, содержимое заключено в рамку. между открывающим и конечным тегом. Обратите внимание, что соответствующий конечный тег начинается с /.

Для получения строки текста на языке, основанном на тегах, проанализируйте этот текст и извлеките заключенное в нем содержимое. внутри последовательностей хорошо организованных тегов, соответствующих следующему критерию:
  • Имена начального и конечного тегов должны совпадать.
  • Теги могут быть вложенными, но содержимое между вложенными тегами считается недопустимым.
  • Теги могут состоять из любых печатных символов.
Формат ввода:
Первая строка входных данных содержит одно целое число N (количество строк).
N последующих строк содержат по одной строке текста.

Ограничения:

< ul>
[*]

Код: Выделить всё

1  0) {
String line = in.nextLine();
char[] A = line.toCharArray();
String tag = "", tag1 = "";
int a1 = 0, b1 = 0;
int a = 0, b = 0;
int flag = 0, end = 0;

a = line.indexOf('', b1);
//System.out.println("Index of first '' is " + b);

while ((a != -1) && (b != -1) && b < line.lastIndexOf(">")) {
tag = "";
tag1 = "";
//System.out.println("Index of first '' is " + b);
for (int k = a + 1; k < b; k++)
tag = tag + A[k];
//System.out.println("tag is " + tag);

a1 = line.indexOf('', b + 1);

if (A[a1+1] == '/') {
//System.out.println("Index of second '' is " + b1);
for (int k = a1 + 2; k < b1; k++)
tag1 = tag1 + A[k];
if ((!tag.isEmpty()) && (!tag1.isEmpty())) {
if (tag.equals(tag1)) {
if ((b + 1) == a1) {
System.out.println("None");
flag = 1;
} else {
for (int k = b + 1; k < a1; k++)
System.out.print(A[k]);
System.out.println();
flag = 1;
}
} else if (flag == 0) {
System.out.println("None");
flag = 1;
}
}
}
a = a1;
b = b1;
//System.out.println("tag1 is " + tag1);
}
if ((b == -1 || a == -1 || tag1.isEmpty() || tag.isEmpty()) && (flag == 0)) {
System.out.println("None");
}
testCases--;
}
}
}
РЕДАКТИРОВАТЬ: В тестовом примере № 3 я не могу отладить проблему, объясняющую, почему эта большая строка анализируется построчно, тогда как она разобрать весь абзац! Если бы он проанализировал это в целом, я бы получил правильный результат.

Подробнее здесь: https://stackoverflow.com/questions/372 ... hackerrank
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»