/*
* 在数据加密和数据压缩中常需要对特殊的字符串进行编码.给定的字母表A由26个小写英文字母组成,即A={a,b...z}.该
字母表产生的长序字符串是指定字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最
多出现1次.例如,a,b,ab,bc,xyz,等字符串是升序字符串.现在对字母表A产生的所有长度不超过6的升序字符串按照字
*/
package exam4;
import java.util.Scanner;
/**
*
* @author <a href="http://bobzone.iteye.com/" target="_blank">朱小波</a>
* @notes Created on 2011-4-28<br>
* 文 件 名 :
* CopyRright (c) 2011-xxxx:
* 文件编号:
* 创 建 人:朱小波
* 日 期:2011-4-28
* 修 改 人:
* 日 期:
* 描 述:
* 版 本 号:
*/
public class Test3 {
//递归计算以i开始的长度为k的所有数的个数,前提是升序
int amount(int i, int k) {
int sum = 0;
if (k == 1) {
return 1;
} else {
for (int j = i + 1; j <= 26; j++) {
sum += amount(j, k - 1);
}
}
return sum;
}
//计算长度为k的所有组合的个数,前提是升序
int amountZuhe(int k) {
int sum = 0;
for (int i = 1; i <= 26; i++) {
sum += amount(i, k);
}
return sum;
}
//转换成数字
int toInt(char c) {
return c - 'a' + 1;
}
//给出一个字符串返回一个序号
int getResult(String s) {
int k = s.length();
int sum = 0, temp = 0;
//获取1~k-1长度的子字符串数
for (int i = 1; i < k; i++) {
sum += amountZuhe(i);
}
//小于第一个字母的长度为k的所有组合个数
for (int i = 1; i < toInt(s.charAt(0)); i++) {
sum += amount(i, k);
}
//以第一个字母作为开始的字符串组合个数
temp = toInt(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
int t = toInt(s.charAt(i)); //获取此时的字母并转化成数字
int len = s.length() - i; //获取此时的长度
for (int j = temp + 1; j < t; j++) //获取比此时数字小,长度是此时的长度的所有组合的个数
{
sum += amount(j, len);
}
temp = t; //获取当前字符值,方便下一次从此项+1项开始累加
}
return sum + 1;
}
public static void main(String[] args) {
Test3 test3 = new Test3();
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
String str[] = new String[a + 1];
for (int i = 1; i <= a; i++) {
str[i] = sc.next();
}
for (int i = 1; i <= a; i++) {
System.out.println(test3.getResult(str[i]));
}
}
}
分享到:
相关推荐
在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A 由26 个小写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且...
对26 个小写英文字母组成的升序字符串进行特殊的编码
在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 A 由26 个小写英文字母组成 A = { a,b,…,z }。该字母表产生的升序字符串 是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序...
在数据压缩和数据加密过程中常需要对特殊的字符串进行编码. 给定的字母表A由26个小写英文字母组成A ={a,b,...z}. 该字母表产生的升序字符串指的是字符串中字母按照从左到右出现的次序与字母表中出现的次序相同,且每...
字典序问题:在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 A 由 26 个小 写英文字母组成 A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到 右出现的次序与字母在字母表中...
在数据加密和数据压缩中常需要对特殊的字符串进行数字编号。给定的字母表 A 由 26 个小写英文字母组成 A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左 到右出现的次序与字母在字母表中出现的次序...
在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A 由26个小写英文字母组成A={a, b,…, z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且...
在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A 由26 个小 写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到 右出现的次序与字母在字母表中出现的次序相同,...
在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 A 由 26 个 写英文字母组成 A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到 右出现的次序与字母在字母表中出现的次序相同,...
在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A 由26 个小写英文字母组成A={a,b,…,z}。
在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 A 由 26 个小写英文字母组成 A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同...
对26个英文字母(已知它们的概率分布)进行了哈夫曼编码,并计算了编码效率。有助于大家理解哈夫曼编码以及信息论的相关知识哦。
某软件公司要开发一个数据加密模块,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时提供了稍复杂的逆向输出加密,还提供了更加高级的求模加密。用户先使用简单的加密算法对字符串进行加密,...
排列生成算法 字典序法 C语言源代码 排列生成算法的一种,采用交换和逆序的方法生成排列
国密算法sm4,可加密数据支持中英文特殊字符,可加密文件或字符串,支持cbc和ecb模式
数据加密 加密字符串 数据加密 加密字符串 数据加密 加密字符串 数据加密 加密字符串 数据加密 加密字符串 数据加密 加密字符串
易语言源码易语言黑月版字符串加密源码.rar 易语言源码易语言黑月版字符串加密源码.rar 易语言源码易语言黑月版字符串加密源码.rar 易语言源码易语言黑月版字符串加密源码.rar 易语言源码易语言黑月版字符串加密...
精彩编程与编程技巧-加密字符串算法 ...
对字符串进行加密 Console.WriteLine("请输入原字符串"); string str = Console.ReadLine(); Console.WriteLine("请输入加密字符串"); string str1 = Console.ReadLine(); string strNew = null; char ch; for...
VB.NET《MD5加密字符串(Excel加密字符串+字符串验证).zip 源码全部开放:有MD5 的32位加密 和 16位加密 一般用于字符串加密,字符串验证等等