算法面试题——敏感字段加密(python)

题目描述

给定一个由多个命令字组成的命令字符串:

  1. 字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号;
  2. 命令字之间以一个或多个下划线_进行分割;
  3. 可以通过两个双引号””来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现;

请对指定索引的敏感字段进行加密,替换为******(6个*),并删除命令字前后多余的下划线_。 如果无法找到指定索引的命令字,输出字符串ERROR。

输入描述

输入为两行,第一行为命令字索引K(从0开始),第二行为命令字符串S。

输出描述

输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR。

用例1

输入

1
password__a12345678_timeout_100

输出

password_******_timeout_100

用例2

输入

2
aaa_password_******_timeout_100

输出

aaa_password_******_timeout_100_""

解析

本题考查是的对数组、字符串和集合一些基础操作,所以逻辑上比较简单,直接上代码。

python

index = int(input())
strs = input()
data = []


def process_strs():
    # 定一个boolean类型的flag,标识命令字中是否包含双引号 "
    flag = False
    tmp = ''
    for ch in strs:
        if ch == '"':
            flag = not flag
        # 判断当前子串是空串还是子串结尾
        if ch == '_' and not flag:
            if len(tmp) != 0:
                data.append(tmp)
                tmp = ''
        else:
            tmp += ch
    if len(tmp) != 0:
        data.append(tmp)


def get_result():
    res = ''
    if index < len(data):
        data[index] = '******'
        for s in data:
            if s == '' or len(s) == 0:
                continue
            else:
                res += s
                res += '_'
    if len(res) != 0:
        res = res[:-1]
        print(res)
    else:
        print('ERROR')


def main():
    process_strs()
    get_result()


if __name__ == '__main__':
    main()

欢迎各位补充和优化。

你可能感兴趣的:(python,算法,开发语言)