我在Mettl遇到了这个问题:
该函数具有四个参数-
pin(int):一个包含任意长度数字的数字
例如:1234,34565789
number(int):一个数字(1-9,包括端值,并且小于引脚的长度),从头到尾确定生成ID所必须使用的位数。上面输入的图钉的末端。
生成ID的条件是:
如果名字和姓氏的长度相等,则将按字母顺序出现的名字作为小名字。
使用“数字”和“引脚”输入获得用于生成的数字。
示例1:
名字:拉吉夫
姓:Roy
图钉:123456
编号:3
“罗伊”的长度小于“拉吉夫”的长度。因此,“罗伊”变成了小名字,“拉吉夫”变成了大名字。从引脚开始的第三个数字为“ 3”,从引脚结束的第三个数字为“ 4”。因此,生成的数字为34。
小写字母的最后一个字母为'y'。因此,生成的ID为yRajiv34。
切换字母后,生成的最终ID为YrAJIV34。
function generateId(firstName, lastName, pin, n) {
var result = '';
var smallName = '';
var largeName = '';
if (firstName.length != lastName.length) {
if (firstName.length < lastName.length) {
smallName = firstName;
largeName = lastName;
} else {
largeName = firstName;
smallName = lastName;
}
} else {
var names = [firstName.toLowerCase(), lastName.toLowerCase()];
var sorted = names.sort(function (a, b) {
return a > b;
});
smallName = sorted[0];
largeName = sorted[1];
}
result += smallName.substr(smallName.length - 1, 1).toUpperCase();
result += largeName.substr(0, 1).toLowerCase() + largeName.substr(1, largeName.length).toUpperCase();
var pinString = pin.toString();
var numberLength = pinString.length;
result += pinString.charAt(n - 1) + pinString.charAt(numberLength - n);
return result;
}
var x = generateId('Kumar', 'Kumud', 530076, 2);
console.log(x);
var y = generateId('Rajiv', 'Roy', 345678, 3);
console.log(y);
对于我通过的所有测试用例,它都能正常工作,甚至在mettl站点中正确的测试用例为7/10。我不知道其余3个测试用例失败的原因是什么。有什么方法可以改善算法或我的代码有什么问题吗?
答案 0 :(得分:0)
您不是在切换字符,只是假设字符串的第一个字符为大写字母,然后使其变为小写,而所有其他字符都为小写字母,并使它们变为大写。 这不适用于以下情况:
generateId('RajIV', 'Roy', 345678, 6); // YrAJIV83
您还无法处理number
大于pin
长度的情况。它仍然给出输出。
generateId('RajIV', 'Roy', 345678, 7); // YrAJIV