Третий день уже бьюсь! Вроде придумал простое, лаконичное решение и вроде как оно отрабатывает правильно, но валидатор завершается по timeout. Порядком подустал от этой задачи - подскажите что не так пожалуйста.
Условие довольно длинное, так что смотрите в самой задаче:
Условие тут.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static Map<Integer, Integer> map = new HashMap<>();
//public static String tag = "span";
public static String tag;
public static void main(String[] args) {
tag = args[0];
BufferedReader reader;
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
reader = new BufferedReader(new FileReader(br.readLine()));
while (reader.ready()) {
sb.append(reader.readLine());
}
String str = sb.toString();
/* System.out.println(str);
System.out.println("*************************");*/
tearOff(str);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void tearOff(String string) {
int stack = 1, index = 0;
if (string.contains("<" + tag)) {
while (index < string.length()) {
index = string.indexOf(tag, index);
if (string.charAt(index - 1) == '<') {
index -= 1;
map.put(stack, index);
stack++;
index += 2;
} else if (string.charAt(index - 1) == '/') {
index += 5;
stack--;
map.put(0 - stack, index);
index++;
}
if (stack == 1) {
for (Map.Entry entry : map.entrySet()) {
int x = (int) entry.getKey();
if (x > 0) {
System.out.println(string.substring((int) entry.getValue(), map.get(0 - x)));
}
}
map.clear();
}
}
}
}
}
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static Map<Integer, Integer> map = new HashMap<>();
//public static String tag = "span";
public static String tag;
public static void main(String[] args) {
tag = args[0];
BufferedReader reader;
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
reader = new BufferedReader(new FileReader(br.readLine()));
while (reader.ready()) {
sb.append(reader.readLine());
}
String str = sb.toString();
/* System.out.println(str);
System.out.println("*************************");*/
ripOff(str);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void ripOff(String string) {
int stack = 1, index = 0;
if (string.contains("<" + tag)) {
while (index < string.length()) {
index = string.indexOf(tag, index);
if (string.charAt(index - 1) == '<') {
index -= 1;
map.put(stack, index);
stack++;
index += 2;
} else if (string.charAt(index - 1) == '/') {
index += 5;
stack--;
map.put(0 - stack, index);
index++;
}
if (stack == 1) {
for (Map.Entry entry : map.entrySet()) {
int x = (int) entry.getKey();
if (x > 0) {
System.out.println(string.substring((int) entry.getValue(), map.get(0 - x)));
}
}
map.clear();
}
}
}
}
}