刷题0724 滑动窗口 HJ21,HJ26以及NC101的总结
一
利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2bc5a3。 1.如果只有一个字符,1不用写 2.字符串中只包含大小写英文字母(a至z)。 数据范围: 0<=字符串长度<=50000 要求:时间复杂度O(N) 示例1 输入: "aabcccccaaa" 复制 返回值: "a2bc5a3" 复制 示例2 输入: "shopeew" 复制 返回值: "shope2w"
class Solution: def compressString(self , s ): if not s: return '' N = len(s) ret = [] l, r = 0, 0 while r <= N: # 一般是 r < N,这里 r 到结尾时要再执行一次 if r == N or s[l] != s[r]: # 注意判断顺序 ret.append(s[l]) if r > l + 1: ret.append(str(r - l)) l = r r += 1 return ''.join(ret)
二
描述 现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9. 而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。 数字和其它的符号都不做变换。 数据范围: 输入的字符串长度满足 1 \le n \le 100 \1≤n≤100 输入描述: 输入一组密码,长度不超过100个字符。 输出描述: 输出密码变换后的字符串 示例1 输入: YUANzhi1987 复制 输出: zvbo9441987
while True: try: password = input() list1 = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'] result = '' for i in password: # 是字母的情况 if i.isalpha(): # 是大写字母 if i.isupper(): if i=='Z': result += 'a' else: result += chr(ord(i.lower())+1) # 不是大写字母 else: for j in list1: if i in j: result += str(list1.index(j)+2) break # 不是字母的情况 else: result +=i print(result) except: break
三
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY