元素选择器题目我就不粘贴了,大家都能看到原题。
下面是我的代码,只得了70分,不知道哪里出了问题,给定实例我试过了,没有问题,但并未发现自己的问题出在哪里,希望大家能帮我看看,不胜感激!
package com.ww.ccf;
import java.util.Scanner;
/**
* encoding: UTF-8
* Date: 2018年11月19日
* Description: 元素选择器
*/
public class ItemSelect {
static class Search {
int textLines;
String[] text;
StringBuilder[] result;
boolean flag;
public Search(int textLines, String[] text, StringBuilder[] result) {
this.textLines = textLines;
this.text = text;
this.result = result;
this.flag = true;
}
//递归匹配 从文档何处开始 选择器数组 选择器哪一项 当前匹配项 选择器总长
public boolean find(int start,String[] info,int num,int i,int maxDeep) {
if(num<maxDeep && flag) {//匹配选择器分割后的每一项
for(int j=start;j<textLines;j++) {
if(info[num].startsWith("#")) {//是属性id,区分大小写
if(text[j].contains(info[num])) {//第一项匹配成功
if(maxDeep-1 == num) {//选择器每一项都成功匹配
result[i].append((char)(j+1+'a'));//文档序号加入序列
flag = false;
}
else //从下一位置开始匹配选择器后序项
find(j+1,info,num+1,i,maxDeep);
}
} else {//不是属性id,忽略大小写,全部以小写形式匹配
if(text[j].toLowerCase().contains(info[num])) {
if(maxDeep-1 == num) {//选择器最后一项匹配成功
result[i].append((char)(j+1+'a'));
flag = false;
}
else
find(j+1,info,num+1,i,maxDeep);
}
}
}
}
return flag;
}
}
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int textLines = scn.nextInt();//文档行数
int selectors = scn.nextInt();//匹配串数
scn.nextLine();//非常重要
//保存匹配到的文档行数序列串
StringBuilder[] result = new StringBuilder[selectors];//数组元素并未真正创建
String[] text = new String[textLines+selectors];//获取全部输入
for(int i=0;i<text.length;i++) {
text[i] = scn.nextLine();
}
Search sc = new Search(textLines,text,result);//创建类对象
for(int i=0;i<selectors;i++) {
result[i] = new StringBuilder();//创建数组元素对象
String[] info = text[i+textLines].split(" ");//分割选择器,获取标签+id
int len = info.length;//标签+id总长
sc.find(0,info,0,i,len);
sc.flag = true;
}
for(StringBuilder sp:result) {//打印每一个匹配项的匹配结果
String str = sp.toString();
System.out.print(str.length()+" ");
if(0 != str.length()) { //有匹配结果
for(int i=0;i<str.length();i++) {
System.out.print(str.charAt(i)-'a'+" ");//字符还原为序号
}
}
System.out.println();
}
scn.close();
}
}
/*
输入:
11 5
html
..head
....title
..body
....h1
....p #subtitle
....div #main
......h2
......p #one
......div
........p #two
p
#subtitle
h3
div p
div div p
输出:
3 6 9 11
1 6
0
2 9 11
1 11
*/
欢迎指正,谢谢各位!!
打赏

