当前位置: 首页 > article >正文

抓住问题的关键解决LeetCode第3337题字符串转换后的长度II

3337.字符串转换后的长度II

难度:困难

问题描述:

给你一个由小写英文字母组成的字符串s,一个整数t表示要执行的转换次数,以及一个长度为26的数组nums。每次转换需要根据以下规则替换字符串s中的每个字符:

将s[i]替换为字母表中后续的nums[s[i]-'a']个连续字符。例如,如果s[i]='a'且nums[0]=3,则字符'a'转换为它后面的3个连续字符,结果为"bcd"。

如果转换超过了'z',则回绕到字母表的开头。例如,如果s[i]='y'且nums[24]=3,则字符'y'转换为它后面的3个连续字符,结果为"zab"。

返回恰好执行t次转换后得到的字符串的长度。

由于答案可能非常大,返回其对109+7取余的结果。

示例1:

输入:s="abcyy",t=2,nums=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2]

输出:7

解释:

第一次转换(t=1)

'a'变为'b'因为nums[0]==1

'b'变为'c'因为nums[1]==1

'c'变为'd'因为nums[2]==1

'y'变为'z'因为nums[24]==1

'y'变为'z'因为nums[24]==1

第一次转换后的字符串为:"bcdzz"

第二次转换(t=2)

'b'变为'c'因为nums[1]==1

'c'变为'd'因为nums[2]==1

'd'变为'e'因为nums[3]==1

'z'变为'ab'因为nums[25]==2

'z'变为'ab'因为nums[25]==2

第二次转换后的字符串为:"cdeabab"

字符串最终长度:字符串为"cdeabab",长度为7个字符。

示例2:

输入:s="azbk",t=1,nums=[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]

输出:8

解释:

第一次转换(t=1)

'a'变为'bc'因为nums[0]==2

'z'变为'ab'因为nums[25]==2

'b'变为'cd'因为nums[1]==2

'k'变为'lm'因为nums[10]==2

第一次转换后的字符串为:"bcabcdlm"

字符串最终长度:字符串为"bcabcdlm",长度为8个字符。

提示:

1<=s.length<=105

s仅由小写英文字母组成。

1<=t<=109

nums.length==26

1<=nums[i]<=25

问题分析:

根据题目的描述,对于字符串s的处理,不管是处理几遍,最终都要涉及到对字符串s中的每一个字符进行处理,因而我们对问题的处理分为三个层次:

  1. 对单个字符的处理。对单个字符的处理,要结合nums中的要求来进行,所以为此编制处理函数turner(c,nums),其功能是对于一个字符c,按照nums中的要求将其转换为一个字符串。比如:字符'z'按nums[25]==1的要求,则转变为'a',若按nums[25]==2的规则,则转变为'ab'。
  2. 对一个字符串s进行处理。既然能够对单个字符c按nums中的规则进行转换,那就可以对字符串s中的每一个字符进行这种转换,进而实现对一个字符串的处理。函数turnall(s)可以实现这个功能,nums给定规则,返回一个按规则处理过后的新字符串。
  3. 循环处理解决遍数,问题就解决了。

程序如下:

#单个字符c按nums中的规则处理,转换为一个新的字符或字符串,并返回
def turner(c,nums):
    idx=ord(c)-97
    cc=nums[idx]
    a=[]
    for i in range(cc):
        a.append(chr((ord(c)-96)%26+97+i))
    return ''.join(a)

#对一个字符串s按nums中的要求进行转换,并返回转换后的结果
def turnall(s):
    a=[]
    for i in s:
        a.append(turner(i,nums))
    return ''.join(a)

#输入s、t和nums
s=input('pls input s=')
t=int(input('pls input t='))
nums=eval(input('pls input nums='))

#利用循环对s进行t遍处理,输出处理之后的字符串和字符串长度
for i in range(t):
    s=turnall(s)
print(s)
print(len(s))

运行实例一

pls input s=abccz

pls input t=2

pls input nums=[1,2,3,1,1,1,1,1,2,1,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2]

cddefeefgefgbcd

15

运行实例二

pls input s=azbk

pls input t=1

pls input nums=[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]

bcabcdlm

8

感悟:

抓住解决问题的关键,问题就会迎刃而解。关键是如何使自己具备这种抓关键的能力。


http://www.kler.cn/a/379900.html

相关文章:

  • mutable用法
  • 无人机之中继通信技术篇
  • 【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)
  • gulp入门教程14:vinyl
  • 读数据工程之道:设计和构建健壮的数据系统28数据服务常见关注点
  • Elasticsearch 实战应用详解!
  • Go语言与数据库操作:从连接到CRUD
  • 有哪些编辑器,怎样选择编辑器
  • 嵌入式硬件电子电路设计(三)电源电路之负电源
  • Oracle SQL Loader概念及用法
  • IOS 防截屏实现
  • 与IP网络规划相关的知识点
  • Linux之信号量
  • Mate70还没发布,就有经销商因提前拆封被罚款50万起?
  • linux驱动-认识输入子系统源码以及裁剪
  • 【c++篇】:深入剖析vector--模拟实现属于自己的c++动态数组
  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战!
  • 2024年科技特长生招生新趋势:多领域扩展与创新人才培养
  • 连续可穿戴式基于微型机器学习跌倒检测
  • Win系统通过命令行查看笔记本电池损耗/寿命/健康
  • 每天10个vue面试题(七)
  • 【Redis_Day3】Redis通用命令
  • VR 创业之路:从《I Expect You To Die》到未来展望
  • 深度学习:Yolo V4的改进
  • 【系统架构设计师】2023年真题论文: 论面向对象分析的应用与实现(包括解题思路和素材)
  • 传智杯 第六届-复赛-C