zoukankan      html  css  js  c++  java
  • java实现第六届蓝桥杯密文搜索

    密文搜索

    福尔摩斯从X星收到一份资料,全部是小写字母组成。
    他的助手提供了另一份资料:许多长度为8的密码列表。
    福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。

    请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。

    数据格式:

    输入第一行:一个字符串s,全部由小写字母组成,长度小于1024*1024
    紧接着一行是一个整数n,表示以下有n行密码,1<=n<=1000
    紧接着是n行字符串,都是小写字母组成,长度都为8

    要求输出:
    一个整数, 表示每行密码的所有排列在s中匹配次数的总和。

    例如:
    用户输入:
    aaaabbbbaabbcccc
    2
    aaaabbbb
    abcabccc

    则程序应该输出:
    4

    这是因为:第一个密码匹配了3次,第二个密码匹配了1次,一共4次。

    资源约定:
    峰值内存消耗(含虚拟机) < 512M
    CPU消耗 < 5000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
    注意:主类的名字必须是:Main,否则按无效代码处理。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        
        public void getResult(String A, String[] pwd) {
            int count = 0;
            ArrayList<Integer> list = new ArrayList<Integer>();
            int[] num = new int[pwd.length];
            for(int i = 0;i < pwd.length;i++) {
                int hash = pwd[i].hashCode();
                if(list.contains(hash)) {
                    int j = list.indexOf(hash);
                    num[j]++;
                } else {
                    list.add(hash);
                    num[list.size() - 1]++;
                }
            }
            for(int i = 0;i <= A.length() - 8;i++) {
                String s = A.substring(i, i + 8);
                char[] temp = s.toCharArray();
                Arrays.sort(temp);
                StringBuffer t = new StringBuffer("");
                for(int j = 0;j < 8;j++)
                    t.append(temp[j]);
                s = t.toString();
                int hash = s.hashCode();
                if(list.contains(hash)) {
                    int k = list.indexOf(hash);
                    count = count + num[k];
                }
            }
            System.out.println(count);
        }
        
        public static void main(String[] args) {
            Main test = new Main();
            Scanner in = new Scanner(System.in);
            String A = in.next();
            int n = in.nextInt();
            String[] pwd = new String[n];
            for(int i = 0;i < n;i++) {
                char[] arrayP = in.next().toCharArray();
                Arrays.sort(arrayP);
                StringBuffer s = new StringBuffer("");
                for(int j = 0;j < arrayP.length;j++)
                    s.append(arrayP[j]);
                pwd[i] = s.toString();
            }
            test.getResult(A, pwd);
        }
    }
    
  • 相关阅读:
    云计算
    uc/xi
    互联网 2.0概念
    java连接数据库
    记录一下安装 mysql 的踩坑之路
    1
    Linux介绍与基本必知命令
    Web课程Linux命令统计
    7——条件判断、三目运算、条件循环、迭代循环
    6——散列类型、运算符优先级、逻辑运算
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077211.html
Copyright © 2011-2022 走看看