字节青训-小D的 abc 变换问题

问题描述

小D拿到了一个仅由 "abc" 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换:

  • 将 'a' 变成 'bc'
  • 将 'b' 变成 'ca'
  • 将 'c' 变成 'ab'

小D将重复该操作 k 次。你的任务是输出经过 k 次变换后,得到的最终字符串。

例如:对于初始字符串 "abc",执行 2 次操作后,字符串将变为 "caababbcbcca"

测试样例

样例1:

输入:s = "abc", k = 2
输出:'caababbcbcca'

样例2:

输入:s = "abca", k = 3
输出:'abbcbccabccacaabcaababbcabbcbcca'

样例3:

输入:s = "cba", k = 1
输出:'abcabc'

 

解题思路:

很基础的模拟题

问题理解

你有一个仅由 'a''b''c' 组成的字符串 s,并且你需要对这个字符串进行 k 次变换。每次变换的规则如下:

  • 'a' 变成 'bc'
  • 'b' 变成 'ca'
  • 'c' 变成 'ab'

数据结构选择

由于每次变换都会使字符串的长度增加,直接模拟这个过程可能会导致内存和时间上的问题,尤其是当 k 很大时。因此,我们需要找到一种更高效的方法来处理这个问题。

算法步骤

  1. 直接模拟:对于较小的 k,可以直接模拟每次变换的过程。
  2. 周期性分析:观察变换的周期性,可能会发现某些模式或周期性,从而减少计算量。

最后跑的时候发现用例的k值和字符串其实都特别小,这个特判不管处不处理都能AC

最终代码:

def transform(s):result = ""for c in s:if c == 'a':result += "bc"elif c == 'b':result += "ca"elif c == 'c':result += "ab"return resultdef solution(s, k):# 如果 k 较小,直接模拟变换if k <= 5:for _ in range(k):s = transform(s)return s# 如果 k 较大,尝试寻找周期性seen = {s: 0}# 进行变换并检查周期性for i in range(1, k + 1):s = transform(s)# 检查是否出现了重复的模式if s in seen:# 找到周期性cycle_start = seen[s]cycle_length = i - cycle_start# 计算剩余的变换次数remaining_k = (k - cycle_start) % cycle_length# 进行剩余的变换for _ in range(remaining_k):s = transform(s)return s# 记录当前变换结果seen[s] = ireturn s# 测试样例
print(solution("abc", 2) == "caababbcbcca")
print(solution("abca", 3) == "abbcbccabccacaabcaababbcabbcbcca")
print(solution("cba", 1) == "abcabc")

 运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5154.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Air780E基于LuatOS编程开发

Air780E基于LuatOS编程开发 Air780E开发板下载固件版本开发板刷机开发调试 Air780E开发板 合宙通信推出的 LTE Cat.1 bis通信模块&#xff0c;采用移芯EC618平台&#xff0c;支持4G全网通, 包括的模组有: Air780E – 4G Cat.1Air780EG – Air780EAir510U,支持GNSS/GPS卫星定位…

Chrome与火狐哪个浏览器的移动版本更流畅

在当今的数字化时代&#xff0c;移动设备已经成为我们生活中不可或缺的一部分。而浏览器作为我们访问互联网的重要工具&#xff0c;其性能和用户体验直接影响到我们的使用感受。本文将对比Chrome和火狐&#xff08;Firefox&#xff09;两款主流浏览器的移动版本&#xff0c;探讨…

深度学习-pytorch安装与基本使用

一. 基本介绍 Pytorch概念 PyTorch是一个开源机器学习和深度学习框架。PyTorch 允许您使用 Python 代码操作和处理数据并编写深度学习算法&#xff0c;能够在强大的GPU加速基础上实现张量和动态神经网络。 PyTorch是一个基于 Python 的科学计算包&#xff0c;使用 Tensor 作为…

HCIP-HarmonyOS Application Developer V1.0 笔记(五)

弹窗功能 prompt模块来调用系统弹窗API进行弹窗制作。 当前支持3种弹窗API&#xff0c;分别为&#xff1a; 文本弹窗&#xff0c;prompt.showToast&#xff1b;对话框&#xff0c;prompt.showDialog&#xff1b;操作菜单&#xff0c;prompt.showActionMenu。 要使用弹窗功能&…

[极客大挑战 2019]EasySQL 1

[极客大挑战 2019]EasySQL 1 观察题目&#xff0c;发现为登录界面&#xff0c;判断这道题的考点是SQL注入。 知识点 万能密码 知识点原理 当用户尝试登录时 网站后台会进行SQL查询&#xff0c;比如 【select * from table_name where username‘xxxx’ and password‘xxxx…

42.第二阶段x86游戏实战2-lua寻找状态指针

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

leetcode:杨辉三角

题目链接 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> vv(numRows);//生成一个长度为5&#xff0c;元素为vector<int>的顺序表for (int i 0; i < numRows; i)//对生成的顺序表初始化&#xff…

flutter 写个简单的界面

起因&#xff0c; 目的: 来源: 客户需求。 着急要&#xff0c;我随便写的&#xff0c;应付一下。 过程: 略&#xff0c;直接看代码&#xff0c;看注释。 代码 1 xxx import package:flutter/material.dart;void main() {runApp(const MyApp()); }// # class MyApp extends…

030集——分组法——C# CAD二次开发

重叠的图行进行分组&#xff0c;效果如下&#xff1a; 纵向投影重叠&#xff08;横向移动冲突&#xff09;可以分组: 纵向冲突也可以分组&#xff1a; 也可根据颜色不同分组&#xff1a; 部分代码如下&#xff0c;完整代码见文章下方名片 public class Class1{[CommandMethod(…

java就近原则与this用法 C语言字符串与指针

1. &#xff08;1&#xff09; public class girlfriend{ String name; double high; String face; String age; //在方法里面是局部变量&#xff0c;在方法外面是成员变量public void setName(String name) {this.namename;}public String getName(){return name;}public vo…

基于ssm的个人健康管理系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

HTML学习笔记十三

系列笔记目录 第一章 HTML的概述 第二章 URL简介 第三章 网页元素的属性 第四章 html字符编码 第五章 网页的语义结构 第六章 文本标签 第七章 列表标签 第八章 图像标签 第九章 链接标签 第十章 多媒体标签 第十一章 iframe 第十二章 [表格标签]&#xff08;https://blog.csdn…

使用NVM自由切换nodejs版本

一、NVM介绍 在日常开发中&#xff0c;我们可能需要同时进行多个不同NodeJS版本的项目开发&#xff0c;每个项目所依赖的nodejs版本可能不一致&#xff0c;我们如果只安装一个版本的nodejs&#xff0c;就可能出现node版本冲突问题&#xff0c;导致项目无法启动。这种情况下&am…

我懵了,docker容器访问不了外部网络

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 我懵了&#xff0c;docker容器访问不了外部网络 前戏docker中的bridge网络详解解决加餐 前戏 事…

rocketMq学习

RocketMq学习 首先需要了解一下Rocketmq。与市面上常见的消息中间件的区别 工作原理图&#xff1a; 从这张图我们可以看到&#xff0c;rocketmq几个关键的指标 producer、NameServer、broker、consumer windows下安装RocketMq 并使用图形化界面进行管理 1、RocketMq官网下…

Java类和对象(下篇)

今天接着学习类和对象(苦笑)(苦笑)(苦笑) 1. 封装 1.1 封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。 而类和对象阶段&#xff0c;主要研究的就是封装特性。 何为封装呢&#xff1f;简单来说就是套壳屏蔽细节。 举例&#xff1a;对于计算机使用者而言&am…

Docker在CentOS上的安装与配置

前言 随着云计算和微服务架构的兴起&#xff0c;Docker作为一种轻量级的容器技术&#xff0c;已经成为现代软件开发和运维中的重要工具。本文旨在为初学者提供一份详尽的指南&#xff0c;帮助他们在CentOS系统上安装和配置Docker及相关组件&#xff0c;如Docker Compose和私有…

视频智能分析平台LiteAIServer入侵检测算法平台部署行人入侵检测算法:智能安防的新利器

在当今数字化时代&#xff0c;安全防护成为了社会各界高度关注的重要议题。随着人工智能技术的不断发展&#xff0c;视频智能分析平台LiteAIServer 行人入侵检测算法应运而生&#xff0c;为安防领域带来了全新的突破与变革。 视频智能分析平台LiteAIServer 行人入侵检测算法是基…

Java AOT 快速入门

1、编译类型介绍 AOT: Ahead-of-time (提前编译)&#xff1a;程序执行前&#xff0c;全部被编译成机器码 JIT&#xff1a;Just in time&#xff08;即时编译&#xff09;&#xff1a;程序边编译&#xff0c;边运行。 编译&#xff1a;源代码->.class文件->机器码 2、A…

思维导图工具有哪些?10款思维导图特色介绍

电脑的普及&#xff0c;互联网的便捷。使我们平时工作、学习等场景下&#xff0c;常常离不开思维导图的辅助。思维导图是可以让我们所需要介绍的知识点以图文形式结合&#xff0c;展示出来。帮助我们方便理解。因此&#xff0c;一款好的思维导图工具&#xff0c;能让我们制作的…