解题思路:        如下,检索每个关键字是不是与下面的每个单词在等长的情况下字母匹配,一步步模拟就行   (可进一步优化)

注意事项:        注意暂存字符串的处理和输出顺序

参考代码:

import java.util.Scanner;
/**
 * 2021年2月18日  上午9:31:56
 * @author praguetramp
 */
public class P2058 {
	public static void main(String []args) {
		Scanner in =new Scanner(System.in);
		String keyword[] =in.nextLine().split(" ");
		String check[] =in.nextLine().split(" "),ans="";
		for(int i=0;i<keyword.length;i++) {   //关键字检索
			for(int j=0;j<check.length;j++) {  //单词检索是否是变形关键字
				if(check[j].length()==keyword[i].length()) {   //若单词长度与该关键字长度相等,进一步判断
					String tmpString=check[j];                 //创建查询单词的副本,避免后面长度等长的单词再次修改!!!
					for(int k=0;k<keyword[i].length();k++) {   //通过关键字每个字母去判断该单词是否含有该字母,若含有该字母,则把该单词的该一个字符变为0(表示已经匹配了一个字母)
						String tmp =""+keyword[i].charAt(k);
						if(tmpString.contains(tmp)) {
							tmpString=tmpString.replaceFirst(tmp, "0");   //单个匹配
						}else
							break;   //如果已经有字母不匹配了,那么在等长的前提下已经不匹配了
					}
					String ifEqual ="";    //构造完全匹配的字符串单词,即该单词是变形的关键字单词,所以经过上面的replace变为了类似于“0000“的0字符串
					for(int p=0;p<tmpString.length();p++)
						ifEqual+="0";      //设置置换后的比较串
					if(tmpString.equals(ifEqual))
						ans+=keyword[i];
				}
			}
		}
		for(String a:keyword) {       //按前面关键字顺序输出
			if(!ans.contains(a))
				continue;
			else
				System.out.print(a+" ");
		}
		in.close();
	}
}


 

0.0分

2 人评分

  评论区

  • «
  • »