本题答案在这点击进入

假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa,aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx,yyyy 其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。 编写一个函数,输入是任意一个编码,输出这个编码对应的Index.

输入描述:
输入一个待编码的字符串,字符串长度小于等于100.
输出描述:
输出这个编码的index
示例1

输入

baca

输出

16331

题目分析

如果你之前做过另一个题目,“求字符的所有组合,当输入的字符串中含有相同的字符串时,相同的字符交换位置是不同的排列,但是同一个组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。” 那么这个题目一出来起码不会觉得特别无从下手,其实就算没做过也不会特别无从下手,因为就是穷举利器嘛(即使写成漂亮的递归,仍然不能摆脱穷举的命运)。

这里自然不是为了分析这个递归穷举法(也许之后我会再单独写一篇阐述一下下)。所以技巧还是需要一些的。将题目要求的字符串排列组合起来,如下图示

根据排列组合的原理,单独来看每一位字符其可能的组合都是,把4位结合起来看,从第1位到第4位,其可能的排列组合分别是。对于每个字符串的index需要拆分开一位一位看。

先来看最末位,即字符串有4位,前3为相同,只有最后一位不同,那么index = index‘+(*p-*p’)。举个例子

p' 是指向字符串aaaa的最后一位a的指针,p是指向字符串aaab的最后一位b的指针,那么aaab的index就等于aaaa的index‘加上字符b与字符a的距离(即’b‘-’a')

接下来看倒数第二位,即前2位和最后1位相同,只有倒数第2位不同,那么index = index' +(*p-*p’)*( + 1)。举个例子

p' 是指向字符串aaaa的第3位a的指针,p是指向字符串aaba的指针,那么按排列规则,aaaa与aaba之间应该有字符串aaab,aaac,aaad...aaay, aab,再加上aaaa自身,这一系列字符串正好是一个完整的。再来看一个例子,aaaa与aaca,它们之间应该有字符串aaab,aaac,aaad...aaay,aab, aaba,aabb,aabc...aaby, aac,正好是2倍的 + 1。因此我们可以很容易得出结论,ndex = index' +(*p-*p’)* ( + 1)

再看第2位,即第1位和最后2位相同,只有第2位不同,那么。举个例子

p' 是指向字符串aaaa的第3位a的指针,p是指向字符串abaa的指针,那么按排列规则,aaaa与abaa之间应该有字符串aaab,aaac,...aaay, aaba...aaby...aaya...aayy,再加上aaaa自身,这一系列字符串正好是一个完整的 + 

最后就是首位了,即第1位不同,后面的3位相同,那么。举个例子

p' 是指向字符串aaaa的第3位a的指针,p是指向字符串baaa的指针,那么按排列规则,aaaa与baaa之间应该有字符串aaab,aaac,...aaay, aab,aaba...aaby...ab,aba,abaa,...abyy, ay,aya,ayaa...ayyy,b,ba,baa,再加上aaaa自身,这一系列字符串正好是一个完整的++

综上,mnoq相对于字符串a的index应该是

分析完毕。输入index反向查找字符串正好是将上面的分析过程反过来,这里不详细记述。代码如下

(牛客腾讯思维编程题)编码编码分组打印下标题目分析相关推荐

  1. 牛客网【每日一题】4月14日题目精讲 Xorto

    文章目录 题目描述 题解: 代码: 扩展 传送 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format:%lld 题目描述 ...

  2. 牛客网 【每日一题】8月5日题目精讲—蓝魔法师

    来源:牛客网: 文章目录 题目描述 题解: 代码: 题目描述 "你,你认错人了.我真的,真的不是食人魔."–蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于 ...

  3. 牛客网【每日一题】7月31日题目精讲—兔子的区间密码

    来源:牛客网 : 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 文章目录 题目描述 题解: 代码: 题 ...

  4. 牛客网【每日一题】7月30日题目精讲—Xor Path

    来源:牛客网: Xor Path 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵 ...

  5. 牛客网【每日一题】7月29日题目精讲—Max Power

    来源:牛客网: Max Power 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 小卤蛋刚把 ...

  6. 牛客网 【每日一题】7月27日题目精讲—乌龟棋

    来源:牛客网: 乌龟棋 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 文章目录 乌龟棋 题目描述 ...

  7. 牛客网【每日一题】7月21日题目精讲—区间权值

    来源:牛客网: 区间权值 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言2097152K 64bit IO Format: %lld 题目描述 输入描述: ...

  8. 数据结构测试牛客网两道编程题

    我的目录: 环形链表的约瑟夫问题(进阶) 计算二叉树左叶子之和 环形链表的约瑟夫问题(进阶) 描述: 据说著名犹太历史学家 Josephus 有过以下故事:在罗马人占领乔塔帕特后,39 个犹太人与 J ...

  9. 牛客网140道编程题源代码(1—50)

    题解1 | # 实践出真知 链接:https://www.nowcoder.com/practice/9273504dbe6f4c5a92b75854faca5f45 #include <std ...

最新文章

  1. virtualbox 虚拟机没有ipv4
  2. python2 pip安装包等出现各种编码错误UnicodeDecodeError: 'ascii'(/或者utf-8) codec can't decode byte 0xd2......
  3. 团队作业——项目Alpha版本发布
  4. 英魂之刃服务器维护中修改,英魂之刃gg修改教程 | 手游网游页游攻略大全
  5. 英特尔“Beach”图片泄露 Optane SSD路线图成关注焦点
  6. 如何新建Spring Boot工程
  7. cvCalcBackProjectPatch() 基于块的反向投影
  8. Java常用框架面试题
  9. eclipse中svn从分支合并到主干及冲突解决
  10. 高等数学(第七版)同济大学 习题3-8 个人解答
  11. ubuntu降低内核版本
  12. 【Spark】(task5)SparkML基础(分类 | 聚类模型)
  13. 泰戈尔《园丁集》选段
  14. sql做题记录(一)
  15. MATLAB笔记:打开数据文件的三种方法+读取数据文件的两种方法+保存数据文件的两种方法
  16. 荧光微球激发光谱图/橙色荧光微球/绿色荧光微球/氨基红色荧光微球/氨基橙色荧光微球
  17. [Obsidian]懒人必备插件附使用教程
  18. RSA加密算法(32bit比特级运算)(复杂版)(C++实现)
  19. 2010年5月24日--2015年5月24日
  20. clickonce程序部署后,启动不成功的问题

热门文章

  1. 省技术市场举办中小企业专利法律风险防范及专利战略制定讲座
  2. 《C#多线程编程实战(原书第2版)》——第3章 使用线程池 3.1 简介
  3. mysql利用merge存储引擎分表的方法
  4. Handler线程间通信
  5. 编程控制Word文档中Table的赋值
  6. 怎么修改Outlook2010 PST数据文件位置(默认邮件存储目录)
  7. PHP QQ 登录接口应用
  8. 2010.12.14 关于decimal和Numeric类型
  9. cisco 访问控制列表ACL笔记
  10. Open***服务器安装配置及客户端调试