原题链接:蓝桥杯算法提高VIP-P1003
解题思路: 如下,检索每个关键字是不是与下面的每个单词在等长的情况下字母匹配,一步步模拟就行 (可进一步优化)
注意事项: 注意暂存字符串的处理和输出顺序
参考代码:
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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复