字典序

来源:互联网 发布:建筑业统一发票软件 编辑:程序博客网 时间:2024/05/22 01:54

给定一串字母,判断所在位置,字符窜每个字母出现一次,且为升序。如a,b,c……x,y,z,ab,ac……abc


public class Q1_2 {static int count = 0;public static void main(String[] args) {@SuppressWarnings("resource")Scanner input=new Scanner(System.in);int sum=0;System.out.println("输入字符串:");String s=input.nextLine();sum+=g(s.length());int[]arrInt=new int[s.length()];char[] arrChar=s.toCharArray();for (int i = 0; i < arrChar.length; i++) {arrInt[i]=(int)arrChar[i]-96;}for (int i = 1; i < arrInt[0]; i++) {count=0;sum+=f(i,s.length());}for (int i = s.length()-1; i >=1; i--) {for (int j = arrInt[s.length()-i-1]+1; j < arrInt[s.length()-i]; j++) {count=0;if(j<arrInt[s.length()-i]){sum+=f(j,i);}}}System.out.println(sum+1);}public static int g(int k) {          //g方法利用f 计算出k位字母有多少个int countTemp = 0;for (int i = 1; i < k; i++) {for (int j = 1; j <= 26-i+1; j++) {countTemp=f(j, i);}}return countTemp;}public static int f(int i, int k) {         //以第i个字母开头  长度为k的个数          递归if (k == 1) {count++;} else {for (int j = i + 1; j <= 26; j++) {f(j, k - 1);}}return count;}}