谷歌(Google)技术面试——在线评估问题(四)

谷歌(Google)面试过程的第一步,你可能会收到一个在线评估链接。 评估有效期为 7 天,包含两个编码问题,需要在一小时内完成。 以下是一些供你练习的在线评估问题

在本章结尾处,还提供了有关 Google 面试不同阶段的更多详细信息。

密钥格式化

给定一个许可密钥字符串 s,仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n + 1 组。你也会得到一个整数 k 。

我们想要重新格式化字符串 s,使每一组包含 k 个字符,除了第一组,它可以比 k 短,但仍然必须包含至少一个字符。此外,两组之间必须插入破折号,并且应该将所有小写字母转换为大写字母。

返回 重新格式化的许可密钥 。

示例 1

输入:S = “5F3Z-2e-9-w”, k = 4
输出:“5F3Z-2E9W”
解释:字符串 S 被分成了两个部分,每部分 4 个字符;
注意,两个额外的破折号需要删掉。

示例 2

输入:S = “2-5g-3-J”, k = 2
输出:“2-5G-3J”
解释:字符串 S 被分成了 3 个部分,按照前面的规则描述,第一部分的字符可以少于给定的数量,其余部分皆为 2 个字符。

提示:

  • 1 <= s.length <= 105
  • s 只包含字母、数字和破折号 ‘-’.
  • 1 <= k <= 104

思路一:

  1. 首先,去除字符串中的所有破折号,并将字符串中的字母全部转换为大写字母。
  2. 然后,计算去除破折号后的字符串的长度,并根据给定的 k 值,计算出第一个部分的长度。
  3. 将第一个部分长度不足 k 的部分与剩余部分组合成一个新的字符串,同时在部分之间插入破折号。

代码示例1

def licenseKeyFormatting(s, k):# 去除字符串中的破折号,并将所有字母转换为大写s = s.replace('-', '').upper()n = len(s)first_part_length = n % k  # 计算第一个部分的长度result = s[:first_part_length]  # 第一个部分i = first_part_length# 循环构造新的字符串while i < n:if result:result += '-'result += s[i:i+k]i += kreturn result# 示例 1
S1 = "5F3Z-2e-9-w"
k1 = 4
print(licenseKeyFormatting(S1, k1)) # 输出:“5F3Z-2E9W”# 示例 2
S2 = "2-5g-3-J"
k2 = 2
print(licenseKeyFormatting(S2, k2)) # 输出:“2-5G-3J”

这个函数首先去除字符串中的破折号,并将所有字母转换为大写。然后根据给定的 k 值计算第一个部分的长度,以及剩余部分的长度。接下来,使用循环将第一个部分长度不足 k 的部分与剩余部分组合成一个新的字符串,同时在部分之间插入破折号。最后返回新的字符串。

思路二:

第二种解题思路是使用栈来处理字符串。具体步骤如下:

  1. 将字符串中的破折号去除,并将所有字母转换为大写。
  2. 从右向左遍历处理字符串,每次处理 k 个字符,并将其放入栈中。
  3. 在放入栈之前,检查当前栈中字符的个数是否达到 k 个,如果是,则在字符之前插入一个破折号。
  4. 最后从栈中弹出字符,构造最终的字符串。

代码示例2

def licenseKeyFormatting(s, k):# 去除字符串中的破折号,并将所有字母转换为大写s = s.replace('-', '').upper()n = len(s)stack = []count = 0# 从右向左遍历处理字符串for i in range(n - 1, -1, -1):if s[i].isalnum():stack.append(s[i])count += 1# 每次处理 k 个字符,检查是否需要插入破折号if count == k and i != 0:stack.append('-')count = 0# 构造最终的字符串result = ''while stack:result += stack.pop()return result# 示例 1
S1 = "5F3Z-2e-9-w"
k1 = 4
print(licenseKeyFormatting(S1, k1)) # 输出:“5F3Z-2E9W”# 示例 2
S2 = "2-5g-3-J"
k2 = 2
print(licenseKeyFormatting(S2, k2)) # 输出:“2-5G-3J”

这个函数首先去除字符串中的破折号,并将所有字母转换为大写。然后从右向左遍历处理字符串,每次处理 k 个字符,并将其放入栈中。在放入栈之前,检查当前栈中字符的个数是否达到 k 个,如果是,则在字符之前插入一个破折号。最后从栈中弹出字符,构造最终的字符串。

思路三:

第三种解题思路是使用递归。具体步骤如下:

  1. 去除字符串中的破折号,并将所有字母转换为大写。
  2. 递归地处理字符串,每次处理 k 个字符。
  3. 在处理字符串时,首先处理最后一个部分,然后递归处理前面的部分。
  4. 在处理字符串的过程中,每次递归都将结果插入到当前部分的前面,并在部分之间插入破折号。
  5. 最后返回处理完的字符串。

代码示例3

def licenseKeyFormatting(s, k):# 去除字符串中的破折号,并将所有字母转换为大写s = s.replace('-', '').upper()n = len(s)# 递归处理字符串def format_helper(s):if len(s) <= k:return selse:return format_helper(s[:-k]) + '-' + s[-k:]return format_helper(s)# 示例 1
S1 = "5F3Z-2e-9-w"
k1 = 4
print(licenseKeyFormatting(S1, k1)) # 输出:“5F3Z-2E9W”# 示例 2
S2 = "2-5g-3-J"
k2 = 2
print(licenseKeyFormatting(S2, k2)) # 输出:“2-5G-3J”

这个函数首先去除字符串中的破折号,并将所有字母转换为大写。然后使用递归处理字符串,每次处理 k 个字符。在处理字符串的过程中,首先处理最后一个部分,然后递归处理前面的部分,并将结果插入到当前部分的前面,并在部分之间插入破折号。最后返回处理完的字符串。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux gcc day3

find命令&#xff08;importance&#xff09;&#xff1a; 语法&#xff1a;find pathname -options find /root -name test.c which命令&#xff1a; which [指令] 只搜索指令&#xff0c;在什么位置下 为什么文件夹带有颜色呢&#xff1f; 科普补充alias命令&#xff1a; ali…

C++:赋值运算符(17)

赋值也就是将后面的值赋值给变量&#xff0c;这里最常用的就是 &#xff0c;a1那么a就是1&#xff0c;此外还包含以下的赋值运算 等于int a 1; a10 a10加等于int a 1; a1;a2-减等于int a 1; a-1;a0*乘等于int a 2; a*5;a10/除等于int a 10; a/2;a5%模等于int a 10; a%…

kafka集群介绍+部署Filebeat+Kafka+ELK

一、消息队列 1、为什么需要消息队列&#xff08;MQ&#xff09; 主要原因是由于在高并发环境下&#xff0c;同步请求来不及处理&#xff0c;请求往往会发生阻塞。比如大量的请求并发访问数据库&#xff0c;导致行锁表锁&#xff0c;最后请求线程会堆积过多&#xff0c;从而触…

题目:求一个3*3矩阵对角线元素之和

题目&#xff1a;求一个3*3矩阵对角线元素之和 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated shoul…

Mac电脑清理垃圾软件 Mac电脑清理垃圾的文件在哪 cleanMyMac X 4.8.0激活号码

Mac用户经常会有这样一些烦恼&#xff0c;比如软件之间的管理&#xff0c;应用生成的缓冲文件怎样删除&#xff0c;还有软件的卸载等等... 如何有效清理Mac中的垃圾文件&#xff0c;删除多余的软件成为Mac用户迫切的需求。本文就为大家介绍几款好用的Mac电脑清理垃圾软件&#…

在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)

在线考试管理系统目录 目录 基于Springboot的在线考试管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 2、后台 管理员功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主…

Redis中的Sentinel(二)

Sentinel 初始化Sentinel状态。 在应用了Sentinel的专用代码之后&#xff0c;接下来&#xff0c;服务器会初始化一个sentinel.c/sentinelState结构(简称Sentinel状态),这个结构 保存了服务器中所有和Sentinel功能有关的状态(服务器的一般状态仍然由redis.h/redisServer保存);…

SaaS 电商设计 (十) 记一次 5000kw 商品数据ES迁移 (详细的集群搭建以及线上灰度过程设计)

目录 一.背景二.技术目标三.技术方案3.1 整体流程3.2 ES 切换前:完成整体新集群的搭建.i:拓扑结构设计ii: 如何选择整体的 **ES** 集群配置. 3.3 **ES** 版本切换中3.3.1 多client版本兼容3.3.2 Router的设计 3.4 ES 切换后3.5 开箱即用3.5.1 开箱使用 demo 演示3.5.2 使用过程…

2024.3.17力扣每日一题——最小高度树

2024.3.17 题目来源我的题解方法一 深度优先遍历方法二 广度优先遍历方法三 拓扑排序 题目来源 力扣每日一题&#xff1b;题序&#xff1a;310 我的题解 方法一 深度优先遍历 从每一个节点开始进行深度优先遍历并计算以该节点为根节点的树的深度&#xff0c;使用哈希表存储对…

团体程序设计天梯赛-练习集 01

天梯赛题解合集 团体程序设计天梯赛-练习集 (L1-001 - L1-012) 团体程序设计天梯赛-练习集 (L1-013 - L1-024) 团体程序设计天梯赛-练习集 (L1-025 - L1-036) 团体程序设计天梯赛-练习集 (L1-037 - L1-048) L1-001 Hello World 输出题 样例 输入 输出 Hello World!思…

爬虫之数据神器5---Peewee数据库关系映射实践

前言&#xff1a; 继续上一章&#xff1a;爬虫之数据神器4---Peewee事务管理和连接池用法-CSDN博客 本章主要就是对peewee的实战进行一些案例的讲解&#xff01; 正文&#xff1a; 1.模型数据操作 1.1 案例:建立学生和课程模型,实现基本的CRUD 我们先创建Student和Course两…

【LAMMPS学习】七、加速性能(5)加速器包比较

7. 加速性能 7.1.基准测试 7.2.测试性能 7.3.通用技巧 7.4.加速器包 7.5.加速器包比较 接下来将比较和对比各种加速器选项&#xff0c;因为有多种方法可以执行 OpenMP 线程、在 GPU 上运行、优化 CPU 上的向量单元以及在英特尔至强融核&#xff08;协&#xff09;处理器上…

爬虫之数据神器4---Peewee事务管理和连接池用法

前言&#xff1a; 继续上一章节&#xff1a;爬虫之数据神器3---Peewee模型定义详解-CSDN博客 事务管理和连接池的重要性 事务管理和连接池是在开发和维护数据库应用程序时非常重要的概念和技术。 事务管理&#xff1a;事务是指作为一个逻辑单元执行的一系列数据库操作。事务具…

图像处理ASIC设计方法 笔记13 图像旋转ASIC的输入输出电路

文章目录 1 DPRAM:双端口 RAM2 IDT Integrated Device Technology, Inc. 公司介绍3 IDT70T633S10DDI4 TMS320C64145 旋转ASIC的输入输出框图图像旋转ASIC的输入输出电路案例用到的芯片相关介绍如下。 1 DPRAM:双端口 RAM DPRAM 的特点是可以通过两个端口同时访问,具有两套完全…

数据结构入门系列-栈的结构及栈的实现

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 栈 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一段进行插入和删除元素操作&#xff0c;进行数据输入和删除操作的一端称为栈顶&#xff0c;另…

如何在TestNG中获取运行时的测试用例细节?

这篇文章将讨论如何在运行时获取测试用例的细节。我们可能在不同的场景中需要这些信息&#xff0c;比如创建定制的报告或者开发一个实时跟踪系统来监视测试用例的进度。 让我们从使用TestNG运行测试套件开始开始。然后&#xff0c;我们将尝试检索每个测试用例的细节&#xff0…

【授时防火墙】GPS北斗卫星授时信号安全防护装置系统

【授时防火墙】GPS北斗卫星授时信号安全防护装置系统 【授时防火墙】GPS北斗卫星授时信号安全防护装置系统 1、装置概述 卫星信号安全防护装置&#xff08;以下简称“防护装置”&#xff09;是一款专门针对卫星导航授时安全的设备。该设备能接收 BD 系统和 GPS 系统卫星信号&am…

InternLM2-Chat-1.8B 模型测试

在interStudio进行InternLM2-Chat-1.8B模型访问&#xff0c;进入开发机后 配置基础环境 新建conda环境并且进入 conda create -n demo python3.10 -y conda activate demo 下载pytorch等相关包 conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.…

ChernoCPP 2

视频链接&#xff1a;【62】【Cherno C】【中字】C的线程_哔哩哔哩_bilibili 参考文章&#xff1a;TheChernoCppTutorial_the cherno-CSDN博客 Cherno的C教学视频笔记&#xff08;已完结&#xff09; - 知乎 (zhihu.com) C 的线程 #include<iostream> #include<th…

四、MySQL读写分离之MyCAT

一、读写分离概述 1、什么是读写分离&#xff1a; 读写分离&#xff1a;就是将读写操作分发到不同的服务器&#xff0c;读操作分发到对应的服务器 &#xff08;slave&#xff09;&#xff0c;写操作分发到对应的服务器&#xff08;master&#xff09; ① M-S (主从) 架构下&…