【算法题-java/js】为了防止被黑客取到客户输入的密码...

为了防止被黑客取到客户输入的密码,某银行在登陆软件上以屏幕输入法输入密码,该输入法有9个按钮,每个按钮上有不多于3个字母,字母有先后顺序,按第一个字母需要用鼠标点击按钮1次,第二个字母需要点击2次,第三个字母需要点击3次。按键时,若连续两个字母都在同一个按钮上,则输入前一个字母后需要等待一小段时间。
假设,用户的输入习惯是:点击按钮需要1单位时间,等待一小段时间为2单位时间。某次登陆的时候,9个按钮上的字母分别为azc dwf gti jql mon pkr shu vex yb,
求该客户输入密码花费的时间?
输入:
该客户的密码都是小写字母[a~z],密码长度<=16。
输出:
该客户输入密码的时间
示例:
输入 ac---->输出 6
输入 zc---->输出 7
输入 zw---->输出 4

/**
 * @author 瞎琢磨先生 https://github.com/xiazuomo/xzm-utils.git
 * @date 2022/9/24 0:09
 */
public class Code1 {

    public static void main(String[] args) {
        getTime("ac");
        getTime("zc");
        getTime("zw");
        getTime("abcd");
        getTime("fffffff");
        getTime("");
    }

    private static void getTime(String pwd) {
        if (pwd == null || pwd.length() > 16) {
            throw new RuntimeException(String.format("pwd(%s)为空或长度大于 16", pwd));
        }
        String str = "azc dwf gti jql mon pkr shu vex yb";
        String[] keyArr = str.split(" ");

        // 记录某按键上的多个字符串在数组中的索引的位置(eg. "azc"的位置为 0)
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < keyArr.length; i++) {
            // eg. "azc"
            final String keyStr = keyArr[i];
            // {a, z, c}
            final String[] strArr = keyStr.split("");
            for (String oneWord : strArr) {
                // a: 0,z: 0,c: 0
                map.put(oneWord, i);
            }
        }

        // 遍历 pwd 的各个字符,计算时间
        final String[] pwdArr = pwd.split("");
        Integer lastIndex = null;
        int time = 0;
        for (String s : pwdArr) {
            // ac
            // a: 0,c: 0
            final Integer index = map.get(s);
            // a 在 azc 的 1 位置上
            time += keyArr[index].indexOf(s);
            if (index.equals(lastIndex)) {
                time += 2;
            }
            time += 1;
            lastIndex = index;
        }
        System.out.println(pwd + " 总耗时:" + time);
    }

}
var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
var i = 0;

var strArr = "azc dwf gti jql mon pkr shu vex yb".split(" ")
var mapObj = {}
var place = null
var time = 0
rl.on('line', function (line) {
    for(var i = 0; i < strArr.length; i++) {
        var str = strArr[i].split('')
        for (var j = 0; j < str.length; j++) {
            mapObj[str[j]] = i
        }
    }
    var lineArr = line.split('')
    for (var k = 0; k < lineArr.length; k++) {
        var chart = lineArr[k]
        var index = mapObj[lineArr[k]]
        if (strArr[index].indexOf(chart) > -1) {
            time += strArr[index].indexOf(chart) + 1
            if (place === index) {
                time += 2
            }
            place = index
        }
    }
    console.log(time)
    mapObj = {}
    place = null
    time = 0
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用JavaScript(简称JS)将账号和密码以XML格式传输到后端。首先,在前端的HTML页面中引入JS脚本,并通过JS获取用户输入的账号和密码。然后,可以使用JS中的XMLHttpRequest对象创建一个HTTP请求,并指定后端服务器的URL地址。接下来,可以使用JS将账号和密码封装成一个XML格式的数据,并通过请求的send()方法将数据发送给后端。 在后端的Java代码中,可以使用Servlet或者其他框架来接收前端发送的HTTP请求。一旦接收到请求,可以通过Java中的XML解析库,如DOM或SAX,解析接收到的XML数据。从XML中提取账号和密码的值,并进行相关的验证或存储操作。如果账号和密码验证成功,后端可以返回一个表示登录成功的响应给前端,反之返回一个表示登录失败的响应。 需要注意的是,使用XML格式传输账号和密码需要进行一定的安全防护措施,以避免信息泄露或被黑客攻击。可以考虑使用加密算法对账号和密码进行加密,在前端加密后的数据再传输到后端,后端对接收到的加密数据进行解密。此外,还可以在JS和后端之间使用SSL/TLS等加密协议来保证数据传输的安全性。 总而言之,通过前端的JS将账号和密码以XML格式传输到后端的Java应用程序,在后端进行解析和验证,可以实现基本的账号和密码输入功能,并确保数据传输的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值