字典序
来源:互联网 发布:广发淘宝卡新规则 编辑:程序博客网 时间:2024/06/02 11:48
在数据压缩和数据加密过程中常需要对特殊的字符串进行编码.给定的字母表A由26
个小写英文字母组成A?={a,b,…z}.该字母表产生的升序字符串指的是字符串中字母按
照从左到右出现的次序与字母表中出现的次序相同,且每个字符最多出现1次.例如,
a,b,ab,xyz,ax等都是升序字符串.现在对字母表A产生的所有长度不超过6的升序字符串
按照字典序排列如下.
123…262728…
abc…zabac…
对于给定长度不超过6的升序字符串,编程计算出它在上述字典中的编码.
输入描述
输入数据的第1行是一个正整数k,表示接下来共有k行.在接下来的k行中,每行给出一个
字符串.
输出描述
输出结果,每行对应于一个字符串的编码.
输入样例
3
a
b
abc
输出样例
1
2
352
import java.util.Scanner;public class charList {//实现:穷举 static String [] a =new String[] {"0","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; static int count=1;//长度从1开始 static String result[]; static int flag=0; static int p; public static void main(String[] args){ Scanner sc= new Scanner(System.in); int N=sc.nextInt(); result=new String[N]; for(int x = 0;x < N;x++) result[x] = sc.next(); int k = 1; for(p = 0;p < N;p++) { while (flag != 1) { fun("", k, 1, 1, p);//k为几就有几层递归 k++; } //还原一次操作 flag = 0; count = 1; k = 1; } } private static void fun(String t,int k,int c,int h,int p) {//k最终是result长度,c是内部执行fun次数 //h为传入的起始判断位置,避免重复出现 if(k == c) check(t,h,p); else { for(int i = h;i <= 26;i++){ if(flag != 1) fun(t+a[i],k,c+1,i+1,p);//h传入i+1,从下一个字符开始 else break; } } } private static void check(String t,int h,int p){ for(int i = h;i <= 26;i++){ if((t+a[i]).endsWith(result[p])){ flag = 1;//匹配成功 System.out.println(count); break; } count++; } }}
传入参数有点多,但是细分一下还是会很清楚的,好久没发博客了,一段时间没写代码,手生。。。。曾经说好的练手呢?最后是参考了大佬的想法做出来的,希望这种做法能帮到有疑惑的小伙伴。
阅读全文
0 0
- 字典序
- 字典序
- 字典序
- 字典序
- 字典序
- 字典序
- 字典序
- 字典序
- NEUOJ 719 (字典树 字典序)
- 字典序生成组合
- 字典序问题
- 再论字典序
- 字典序全排列
- 深搜 字典序
- 字典序集合
- 字典序法
- 字典序全排列
- 字典序问题
- linux中tar命令大全以及远程文件的复制和印刷
- 用Swift语言 来写表格
- python3将接收到的json数据存入数据库【mysql】
- Centos下PPTP环境部署记录
- 一次简单的存储过程以及定时任务设置
- 字典序
- 面向对象的 七种设计原则 (整理)
- Vue.JS
- Contentprovider修改表两个Demo
- nodejs中函数共享作用域导致的内存泄漏
- Vue.js-----轻量高效的MVVM框架(使用slot分发内容)
- 安卓 使用字体包 自定义字体
- 欢迎使用CSDN-markdown编辑器
- 1234-4321认识android知识体系