import
java.util.*;
public
class
AutoCompleteHTML {
public
static
String autoComplete(String s) {
List<String> linesOfCode =
new
ArrayList<>();
StringBuilder line =
new
StringBuilder();
for
(
char
ch : s.toCharArray()) {
if
(ch ==
'\n'
) {
linesOfCode.add(line.toString());
line.setLength(
0
);
}
else
{
line.append(ch);
}
}
if
(line.length() >
0
) {
linesOfCode.add(line.toString());
}
List<String> selfClosedTags = Arrays.asList(
"area"
,
"base"
,
"br"
,
"col"
,
"embed"
,
"hr"
,
"img"
,
"input"
,
"link"
,
"meta"
,
"param"
,
"source"
,
"track"
,
"wbr"
);
Stack<String> stack =
new
Stack<>();
for
(String lineCode : linesOfCode) {
for
(
int
j =
0
; j < lineCode.length();) {
if
(j +
1
< lineCode.length() && lineCode.charAt(j) ==
'<'
&& lineCode.charAt(j +
1
) ==
'/'
) {
StringBuilder tag =
new
StringBuilder();
j +=
2
;
while
(j < lineCode.length() && Character.isLowerCase(lineCode.charAt(j))) {
tag.append(lineCode.charAt(j));
j++;
}
while
(j < lineCode.length() && lineCode.charAt(j) !=
'>'
) {
j++;
}
if
(!stack.isEmpty() && !stack.peek().equals(tag.toString())) {
return
"</"
+ stack.peek() +
">"
;
}
stack.pop();
}
else
if
(j +
1
< lineCode.length() && lineCode.charAt(j) ==
'<'
&& lineCode.charAt(j +
1
) ==
'!'
) {
j +=
2
;
}
else
if
(lineCode.charAt(j) ==
'<'
) {
StringBuilder tag =
new
StringBuilder();
j++;
while
(j < lineCode.length() && Character.isLowerCase(lineCode.charAt(j))) {
tag.append(lineCode.charAt(j));
j++;
}
while
(j < lineCode.length() && lineCode.charAt(j) !=
'>'
) {
j++;
}
if
(!selfClosedTags.contains(tag.toString())) {
stack.push(tag.toString());
}
}
j++;
}
}
if
(!stack.isEmpty()) {
return
"</"
+ stack.peek() +
">"
;
}
return
"-1"
;
}
public
static
void
main(String[] args) {
String s =
"<! DOCTYPE html>\n<html>\n<head>\n <title>\n GeeksforGeeks\n </title>\n</head>\n<body>\n <button>\n</body>\n</html>"
;
String tag = autoComplete(s);
System.out.println(tag);
}
}