js 敏感字段加密(字符串)

164 阅读2分钟

题目

/**
 * 1.敏感字段加密(字符串)
 * 题目描述:
 * 给定一个由多个命令字组成的命今字符串: 
 * 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号
 * 2、命令字之间以一个或多个下划线 进行分割;
 * 3、可以通过两个双引号”来标识包含下划线 的命令字或空命令字(仅包合两个双引号的命令字),双引号不会在命令字内部出现:
 * 请对指定索引的敏感字段进行加密,替换为 ****** (6个并删除命令字前后多余的下划线如果无法找到指定索引的命令字,输出字符串Q ERROR.
 * 输入描述
 * 输入为两行,第一行为命令字索引K (从0开始),第二行为命令字符串S
 * 输出描述
 * 输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR
 */
  1. 采用遍历字符串的方法找出每个命令。关键字 _ "
  2. 判断边界值
  3. 得到字符串
const index = 11
const str2 = 'a_""__c_"d"'
const s = '******'
const error = 'ERROR'
function fun() {
  // 命令数组
  const arr1 = []
  // 临时数组
  let arr2 = []
  for  (let i = 0; i < str2.length; i++) {
    if (str2[i] === '"') {
      // 引号则往临时数组插入
      if (arr2.includes('"')) {
        // 如果之前存在了引号,则结束临时数组
        arr2.push(str2[i])
        arr1.push(arr2.join(''))
        arr2 = []
      } else {
        // 之前不存在
        arr2.push(str2[i])
      }
    } else if (str2[i] === '_') {
      // 下划线判断
      if (arr2.includes('"')) {
        // 如果临时数组是引号,继续插入
        arr2.push(str2[i])
      } else {
        // 常规命令,结束临时数组
        arr1.push(arr2.join(''))
        arr2 = []
      }
    } else {
      // 其他情况,尽情插入
      arr2.push(str2[i])
    }
  }
  console.log(arr1)

  const arr3 = arr1.filter(v => v !== '')
  if (index > arr3.length - 1) {
    return error
  }
  arr3[index] = s
  return arr3.join('_')
}
const res = fun()
console.log(res)

时间复杂度:

空间复杂度: