字典序 思路

来源:百度知道 编辑:UC知道 时间:2024/06/08 15:36:48
描述:在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A 由26 个小写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1 次。例如,a,b,ab,bc,xyz 等字符串都是升序字符串。现在对字母表A 产生的所有长度不超过6 的升序字符串按照字典序排列并编码如下。
1 2 … 26 27 28 … 对应 a b … z ab ac …
对于任意长度不超过6 的升序字符串,迅速计算出它在上述字典中的编码。
编程任务:
对于给定的长度不超过6 的升序字符串,编程计算出它在上述字典中的编码。

Input

输入数据第一行给出一个字符串。

Output

程序运行结束时,将计算结果输出字符串的编码。

Sample Input

a

Sample Output

1

麻烦说说解题思路!不要代码~~~

首先你要读懂你的题,是要求你在已知的表中找到他对应的位置。
那么你应该知道长度(输入的字符串长度)一旦是1个有效字符(a-z中任何一个)计算的方法都是 <输入的字符> - 'a' + 1;(原因是每个字符都是ascll码表示)。当长度是2个有效字符(ab-az中的任何一个),计算的方法都是 <输入的第二个字符> - 'a' + 2 + (1 + 'z' - 'a') 其中(1 + 'z' - 'a')是长度为1的有效字符总长度。总结上述方法:当长度为N个有效字符时,计算的方法都是
<输入的最后一个有效字符> - 'a' + N + ('z' - 'a' + (N-1) ) + ...直到N大于0,归纳后总结可以使用递归,循环等方法,其实代码实现也很简单。这里不写让你自己去练习下

你要编写的字典序其实是个“26进制数。”
'a'的ASCII值是97,你用字母减96就得到它对应的数字,然后根据位置算结果就行了。
比如说abc,那就是3+2×26+1×26^2

换成十进制来举个例子,123=3×10^0+2*10^1+1*10^2
希望能对你有所帮助。