【算法题】敏感字段加密

  • A+
所属分类:编程茶楼


共计 1963 个字符,预计需要花费 5 分钟才能阅读完成。

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 标题:敏感字段加密 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
 * 【敏感字段加密】给定一个由多个命令字组成的命令字符串:
 * 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号;
 * 2、命令字之间以一个或多个下划线_进行分割;
 * 3、可以通过两个双引号""来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现;
 * 请对指定索引的敏感字段进行加密,替换为******(6个*),并删除命令字前后多余的下划线_。如果无法找到指定索引的命令字,输出字符串ERROR。
 * <p>
 * 输入描述:
 * 输入为两行,第一行为命令字索引K(从0开始),第二行为命令字符串S。
 * 输出描述:
 * 输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR
 * 示例1
 * 输入
 * 1
 * password__a12345678_timeout_100
 * 输出
 * password_******_timeout_100
 * 示例2
 * 输入
 * 2
 * aaa_password_"a12_45678"_timeout__100_""_
 * 输出
 * aaa_password_******_timeout_100_""
 */
public class M_N_T_29 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int K = Integer.parseInt(scanner.nextLine());

        String line = scanner.nextLine();

        char[] chars = line.toCharArray();
        ArrayList<Integer> int_shuang_ying_hao = new ArrayList<>();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == '"') {
                int_shuang_ying_hao.add(i);
            }
        }

        if (int_shuang_ying_hao.size() == 0) {
            int_shuang_ying_hao.add(chars.length);
            int_shuang_ying_hao.add(chars.length + 1);
        }

        ArrayList<String> strings = new ArrayList<>();
        int left = 0;
        for (int i = 0; i < int_shuang_ying_hao.size() - 1; i++) {
            int le = int_shuang_ying_hao.get(i);
            int ri = int_shuang_ying_hao.get(i + 1);

            StringBuilder sb = new StringBuilder();
            if (le > left) {
                for (int j = left; j < le; j++) {
                    if (chars[j] != '_') {
                        sb.append(chars[j]);
                    } else {
                        if (sb.length() != 0) {
                            strings.add(sb.toString());
                            sb.setLength(0);
                        }
                    }
                }
            }

            for (int j = le + 1; j < ri; j++) {
                sb.append(chars[j]);
            }
            strings.add(sb.toString());
            sb.setLength(0);

            if (i == int_shuang_ying_hao.size() - 2 && ri < chars.length - 1) {
                for (int j = ri + 1; j < chars.length; j++) {
                    if (chars[j] != '_') {
                        sb.append(chars[j]);
                    } else {
                        if (sb.length() != 0) {
                            strings.add(sb.toString());
                            sb.setLength(0);
                        }
                    }
                }
            }


            left = ri + 1;

            i++;
        }

        StringBuilder sb = new StringBuilder();
        boolean flag = false;
        for (int i = 0; i < strings.size(); i++) {
            if (i == 0) {
                sb.append(strings.get(i));
                continue;
            }
            if (i == K) {
                sb.append("_").append("******");
                flag = true;
                continue;
            }
            sb.append("_").append("".equals(strings.get(i)) ? "\"\"" : strings.get(i));
        }
        System.out.println(flag ? sb : "ERROR");
    }
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: