问题描述:加入给定一个字符串,如:“abcdefghijkl",其现在的排序为字典的正序排序,排序号为1,那么,字符串“abdcfelkjihg”的字典序号是多少呢?
实例:
输入:2
abcdefghijkl
lkjihgfedcba
输出:
1
439084800
代码如下(未考虑溢出情况):
package dictionalSort;
import java.util.Scanner;
public class DictionSort {
public static void main(String[] args) {
String strModel="abcdefghijkl",temp;
temp=strModel;
int n=0,i=0;
Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();
scanner.nextLine();
String[] strs=new String[n];
while(n>0){
strs[i++]=scanner.nextLine();
n--;
}//read data end
double sortNum=jieCheng(strModel.length());//母字符串的阶乘
int sum=0;
for(int j=0;j<strs.length;j++){ //n个输入串
sum=0;
while(strs[j].length()>0){//每个输入串
sum+=(numIndex(strModel,strs[j].charAt(0))-1)*jieCheng(strModel.length()-1);
StringBuffer sb=new StringBuffer(strModel);
sb.deleteCharAt(numIndex(strModel,strs[j].charAt(0))-1);//删除strModel的检查字符
strModel=sb.toString();
StringBuffer sb1=new StringBuffer(strs[j]);
sb1.deleteCharAt(0);
strs[j]=sb1.toString();
}
System.out.println(++sum);
strModel=temp;
}//n个输入串 end
}
private static int numIndex(String model,char ch){
return model.indexOf(ch)+1;
}
//求阶乘的方法
private static double jieCheng(int i){
if(i==0) return 0;
if(i==1){
return i;
}else{
return i*jieCheng(--i);
}
}
}