题目 2085: [蓝桥杯][算法提高VIP]P1003

时间限制: 1Sec 内存限制: 128MB

题目描述:(原题链接)

     作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。
     请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)


输入:

     两行,第一行表示关键词,空格隔开
     第二行是待检查的内容

样例输入:

guns mines missiles
aameric ssell snug dan iimsssle ot sit neeemis


输出:

输出找到的经过顺序的关键词

样例输出 :

guns missiles


解题思路:

     具体如下

注意事项:

     注意输出的顺序为前面key关键字的顺序

参考代码:

import java.util.Scanner;
/**
 * 2021年2月18日  上午9:31:56
 */
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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值