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

简介: 本题答案在这点击进入假定一种编码的编码范围是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,以此类推。

本题答案在这点击进入

假定一种编码的编码范围是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' 是指向字符串 a aaa的第3位a的指针,p是指向字符串 b aaa的指针,那么按排列规则,aaaa与baaa之间应该有字符串aaab,aaac,...aaay, aab,aaba...aaby...ab,aba,abaa,...abyy, ay,aya,ayaa...ayyy,b,ba,baa,再加上aaaa自身,这一系列字符串正好是一个完整的 + +


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


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

相关文章
|
缓存 网络协议 安全
计算机网络 TCP、RPC、GRPC、HTTP 对比
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 对比
|
3月前
|
人工智能 监控 安全
91_提示注入:安全提示工程
随着大型语言模型(LLM)技术的快速发展和广泛应用,AI系统正以前所未有的方式改变着我们的工作和生活。然而,这种强大的技术也带来了新的安全挑战,其中提示注入(Prompt Injection)攻击已成为最具威胁性的安全问题之一。提示注入攻击通过精心构造的输入,操纵或欺骗AI系统执行非预期行为,可能导致数据泄露、权限绕过、输出不当内容等严重后果
|
5月前
|
传感器 机器人 物联网
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
通过本项目,你可以系统掌握STM32外设控制、蓝牙通信、电机驱动和传感器数据处理技术,实现一辆可远程控制并具备避障功能的智能小车。该项目具有高度可扩展性,后续可增加循迹、自动寻路、摄像头等高级功能。
1118 42
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
|
8月前
|
机器学习/深度学习 人工智能 机器人
魔搭社区模型速递(5.11-5.17)
🙋魔搭ModelScope本期社区进展:📟1656个模型,151个数据集,645个创新应用,📄 9 篇内容
375 11
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
《揭开DeepSeek神秘面纱:复杂逻辑推理背后的技术机制》
DeepSeek是一款基于Transformer架构的大语言模型,以其在复杂逻辑推理任务上的卓越表现成为行业焦点。它通过自注意力机制高效捕捉长距离依赖关系,结合强化学习优化推理策略,利用思维链技术拆解复杂问题,并经过多阶段训练与精调提升推理能力。此外,DeepSeek融合知识图谱和外部知识,拓宽推理边界,使其在处理专业领域问题时更加准确和全面。这些先进技术使DeepSeek能够像人类一样思考和推理,为解决复杂问题提供强大支持。
870 11
|
机器学习/深度学习 人工智能 搜索推荐
AI在电子商务中的个性化推荐系统:驱动用户体验升级
AI在电子商务中的个性化推荐系统:驱动用户体验升级
1509 17
Labview在Excel文件的开头或中间添加数据
Labview在Excel文件的开头或中间添加数据
372 0
|
存储 算法 安全
使用MD5当做文件的唯一标识,这样安全么?
MD5常用于文件完整性验证。通过对文件进行MD5哈希计算,可以生成唯一的哈希值,用于识别文件的内容是否发生改变。这在文件传输和数据备份中特别有用。 MD5也经常被用于密码存储,将用户密码经过MD5哈希后存储,而不是直接保存明文密码,以增加安全性。
3528 0
使用MD5当做文件的唯一标识,这样安全么?
|
缓存 边缘计算 UED
阿里云CDN加速和全站加速DCDN区别及如何选择?
阿里云有两种加速方式,CDN加速和全站加速DCDN。前者也叫静态加速,后者叫动态加速。我们建站要速度快除了带宽大之外,比较重要的就是使用 cdn了。本文详细讲解CDN加速和全站加速DCDN的区别及如何选择。
9549 0
阿里云CDN加速和全站加速DCDN区别及如何选择?