gpt4 book ai didi

java - 我的 java 标签内容提取程序(hackerrank)有什么问题?

转载 作者:行者123 更新时间:2023-12-01 09:55:52 27 4
gpt4 key购买 nike

我的代码通过了前两个测试用例,但第三个测试用例失败了。有人可以帮忙吗?

链接: https://www.hackerrank.com/challenges/tag-content-extractor

问题陈述:

在基于标签的语言(例如 XML 或 HTML)中,内容包含在开始标签和结束标签之间。请注意,相应的结束标记以 / 开头。 .

给定基于标签的语言中的文本字符串,解析该文本并检索满足以下条件的组织良好的标签序列中包含的内容:

  1. 开始标签和结束标签的名称必须相同。

  2. 标签可以嵌套,但嵌套标签之间的内容被视为无效

  3. 标签可以包含任何可打印字符。

输入格式:

输入的第一行包含一个整数,N(行数)。随后的 N 行每行包含一行文本。

约束:

  • 1 <= N <= 100

  • 每行最多包含 10000可打印字符。

  • 所有测试用例的字符总数不会超过1000000 .

输出格式:

对于每一行,打印有效标记内包含的内容。如果一行包含多个有效内容实例,则在新行上打印出每个有效内容实例;如果没有找到有效内容,则打印 None。

我的代码:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int testCases = Integer.parseInt(in.nextLine());

while(testCases > 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('<', a1);
b = line.indexOf('>', b1);
//System.out.println("Index of first '<' is " + a);
//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 " + a);
//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('<', a + 1);
b1 = line.indexOf('>', b + 1);

if (A[a1+1] == '/') {
//System.out.println("Index of second '<' is " + a1);
//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,我无法调试问题,为什么大字符串会被逐行解析,而它必须解析整个段落!如果它能将其解析为一个整体,那么我就会得到正确的输出。

最佳答案

您可以在这里获取它:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int testCases = Integer.parseInt(in.nextLine());
while(testCases>0){

String line=in.nextLine();
int cur=0;
boolean none=true;
for(;;){
int start=line.indexOf("<",cur);
if(start<0)break;
int end=line.indexOf(">",start);
if(end<0)break;
String tag=line.substring(start+1,end);
if(tag.length()==0 || tag.charAt(0)=='/'){
cur=end+1;
continue;
}
int brk=line.indexOf("</"+tag+">");
if(brk>=0){
String output=line.substring(end+1,brk);
if(output.length()>0 && output.indexOf("<")<0){
none=false;
System.out.println(output);
}
}
cur=end+1;
}
if(none)System.out.println("None");
testCases--;
}
}
}

关于java - 我的 java 标签内容提取程序(hackerrank)有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com