元素选择器题目我就不粘贴了,大家都能看到原题。
下面是我的代码,只得了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
*/

欢迎指正,谢谢各位!!

打赏
支付宝 微信
上一篇 下一篇