解题思路: 如下,检索每个关键字是不是与下面的每个单词在等长的情况下字母匹配,一步步模拟就行 (可进一步优化)
注意事项: 注意暂存字符串的处理和输出顺序
参考代码:
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 人评分
printf基础练习2 (C++代码)(受教了,,%#o和%#x的用途)三人行,必有我师,,多看题解会有收获浏览:1873 |
C二级辅导-统计字符 (C语言代码)浏览:729 |
【出圈】 (C语言代码)浏览:553 |
这可能是一个假的冒泡法浏览:985 |
输出正反三角形 (C语言代码)格式错误!!!浏览:1140 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:512 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:779 |
WU-输出九九乘法表 (C++代码)浏览:1653 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:468 |
循环入门练习5 (C语言代码)浏览:828 |