文章目录

这是一道百度校招的面试题

有由abcdefghijkl组成的字符串(不重复出现),求字符串按字母排列的位次:

如输入

1
"hgebkflacdji"

则输出为:

1
302715242

如输入

1
"abcdefghijlk"

则输出为:

1
2

我的求解方法:
思路:求字符串的第一个字母在数组temp中的位置(indexOf()求得)第一个位置确定后,后面的11位字符串可以由11!中排法,所以第一个字母为b则结果result加111!,并将其从数组中移除。然后继续第二个位置,求第二个位置的字母在temp数组中的位置(index),result加上index10!。。。依次类推到最后一个字符。最后的结果还要加上1。JavaScript程序如下:

1
var line = "hgebkflacdji";

var arr = line.split('');
result = 0;
var temp = 'abcdefghijkl'.split("");

// step内存放的是阶乘,分别是11!、10!...1!、0!
var step = [39916800, 3628800, 362880, 40320,5040,720, 120,24,6,2,1,1];
for ( var i = 0; i < arr.length; i++ ) {
	var a = arr[i];
	var index = temp.indexOf(a);
	result += index * step[i];
	temp.splice(index,1);
}
result = result+1;
console.log(result);

可惜在笔试时参考数值中字母顺序弄错了,就差一点,估计过不了百度的笔试了。

文章目录