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

[Go版]算法通关村第十二关青铜——不简单的字符串转换问题

目录

  • 题目:转换成小写字母
    • 思路分析:大写字母ASCII码 + 32 = 小写字母ASCII码
    • Go代码
    • Go代码-优化: 大写字母ASCII码 | 32 = 小写字母ASCII码
  • 题目:字符串转换整数(atoi)
    • 思路分析:去除首部空格 + 明确正负 + 读取数字 + 判断越界
    • Go代码

题目:转换成小写字母

题目链接:LeetCode-709. 转换成小写字母
在这里插入图片描述

思路分析:大写字母ASCII码 + 32 = 小写字母ASCII码

  • 大写字母 A - Z 的 ASCII 码范围为 [65,90]
  • 小写字母 a - z 的 ASCII 码范围为 [97,122]
    所以,只要字符的ASCII码再[65,90]的范围内,将它增加32即可得到对应的小写字母。

Go代码

func toLowerCase(s string) string {ret := make([]rune, len(s))for i, v := range s {if v >= 'A' && v <= 'Z' {ret[i] = v + 32} else {ret[i] = v}}return string(ret)
}

Go代码-优化: 大写字母ASCII码 | 32 = 小写字母ASCII码

[65,90]对应的二进制表示为[ (01000001)2,(01011010)2 ]
32对应的二进制表示为 (00100000)2
对于[ (01000001)2,(01011010)2 ] 内的所有数,表示32的那个二进制位都是0,所以可以对其ASCII码与32做按位或运算,替代与32的加法运算

上面使用了[]rune切片来存储新的字符,这里我们换种写法,使用strings.Builder来构建字符串

func toLowerCase(s string) string {str := &strings.Builder{}str.Grow(len(s))for _, v := range s {if v >= 65 && v <= 90 {str.WriteRune(v | 32)} else {str.WriteRune(v)}}return str.String()
}

题目:字符串转换整数(atoi)

题目链接:LeetCode-8. 字符串转换整数 (atoi)
在这里插入图片描述

思路分析:去除首部空格 + 明确正负 + 读取数字 + 判断越界

  1. 去除首部空格:== ’ ’ 就跳过
  2. 明确正负:默认为1,如果第一个有效字符== ‘-’ 就是-1
  3. 读取数字:
    • 字符 0-9 的 ASCII 码范围为 [48,57],所以通过字符的 ASCII 码值减去 48 可获得相应的数字
    • 值的拼装为 res = res * 10 + v * sign
  4. 判断越界:
    • 超过最大值:res > (math.MaxInt32-v) / 10
    • 小于最小值:res < (math.MinInt32+v) /10

Go代码

func myAtoi(s string) int {ret := 0i := 0length := len(s)sign := 1// 去除首部空格for _, v := range s {if v == ' ' {i++} else {break}}// 获得+-if i < length && (s[i] == '+' || s[i] == '-') {sign = getSign(s[i])i++}// 读取数字for i<length {if s[i] >= '0' && s[i] <= '9' {v := getIntByChar(s[i])// 判断越界问题if MoreThanMax(ret, v) || LittleThanMin(ret, v) {if sign == 1 {return math.MaxInt32}return math.MinInt32}ret = ret*10 + sign*vi++} else {return ret}}return ret
}
func getSign(str byte) int {if str == '-' {return -1}return 1
}
func getIntByChar(ch byte) int {return int(ch-'0')
}
func MoreThanMax(ret, v int) bool {if ret > (math.MaxInt32-v)/10 {return true}return false
}
func LittleThanMin(ret, v int) bool {if ret < (math.MinInt32+v)/10 {return true}return false
}

相关文章:

[Go版]算法通关村第十二关青铜——不简单的字符串转换问题

目录 题目&#xff1a;转换成小写字母思路分析&#xff1a;大写字母ASCII码 32 小写字母ASCII码Go代码Go代码-优化: 大写字母ASCII码 | 32 小写字母ASCII码 题目&#xff1a;字符串转换整数&#xff08;atoi&#xff09;思路分析&#xff1a;去除首部空格 明确正负 读取数…...

十种排序算法(附动图)

排序算法 一、基本介绍 ​ 排序算法比较基础&#xff0c;但是设计到很多计算机科学的想法&#xff0c;如下&#xff1a; ​ 1、比较和非比较的策略 ​ 2、迭代和递归的实现 ​ 3、分而治之思想 ​ 4、最佳、最差、平均情况时间复杂度分析 ​ 5、随机算法 二、排序算法的分类 …...

【校招VIP】测试类型之兼容性测试分析

考点介绍&#xff1a; 兼容性是测试工作里面比较复杂的一种情况&#xff0c;也是校招里面考察的一个重点&#xff0c;需要从屏幕功能&#xff0c;数据&#xff0c;操作系统等多个维度进行分析。 『测试类型之兼容性测试分析』相关题目及解析内容可点击文章末尾链接查看&#x…...

STM32--TIM定时器(1)

文章目录 TIM简介定时器类型 通用定时器预分频器时序计数器时序定时中断基本结构TIM内部中断工程TIM外部中断工程 TIM简介 STM32的TIM&#xff08;定时器&#xff09;是一种非常常用的外设&#xff0c;用于实现各种定时和计数功能。它是基于时钟信号进行计数&#xff0c;并在计…...

Android取证——基础知识

目录 一、安卓系统版本 二、安装操作系统UI 三、鉴权码 1.IMEI(手机序列号) 2.ICCID...

【学习心得】安装cuda/cudann和pytorch

一、查看驱动信息 # 进入CMD输入命令 nvidia-smi 也可以右下角图标打开NVIDIA 设置进行查看 二、下载安装CUDA 1、下载 下载地址 https://developer.nvidia.com/ 2、安装 推荐自定义安装。建议只勾选Cuda&#xff0c;只安装这一个就好&#xff0c;以免报错安装失败。 3、验证…...

中电金信通过KCSP认证 云原生能力获权威认可

中电金信通过KCSP&#xff08;Kubernetes Certified Service Provider&#xff09;认证&#xff0c;正式成为CNCF&#xff08;云原生计算基金会&#xff09;官方认证的 Kubernetes 服务提供商。 Kubernetes是容器管理编排引擎&#xff0c;底层实现为容器技术&#xff0c;是云原…...

【Spring】Bean的实例化

1、简介 在容器中的Bean要实例化为对象有三种方式 1、构造方法 2、静态工厂 3、实例工厂 4、实现工厂接口 2、构造方法 构造方法实例化Bean即是直接通过构造方法创建对象 <bean id"bookDao" class"com.wn.spring.dao.impl.BookDaoImpl"/> 当不存在…...

2023牛客暑期多校训练营8-C Clamped Sequence II

2023牛客暑期多校训练营8-C Clamped Sequence II https://ac.nowcoder.com/acm/contest/57362/C 文章目录 2023牛客暑期多校训练营8-C Clamped Sequence II题意解题思路代码 题意 解题思路 先考虑不加紧密度的情况&#xff0c;要支持单点修改&#xff0c;整体查询&#xff0…...

【GitLab私有仓库】如何在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透?

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…...

企业计算机服务器遭到了locked勒索病毒攻击如何解决,勒索病毒解密

网络技术的不断发展&#xff0c;也为网络安全埋下了隐患&#xff0c;近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的计算机服务器遭到了locked勒索病毒的攻击&#xff0c;导致企业的财务系统内的所有数据被加密无法读取&#xff0c;严重影响了企业的正常运行。最近…...

Redis哨兵模式搭建

Redis主从复制搭建 Redis虽然拥有非常高的性能&#xff0c;但是在实际的生产环境中&#xff0c;使用单机模式还是会产生不少问题的&#xff0c;比如说容易出现 单机故障&#xff0c;容量瓶颈&#xff0c;以及QPS瓶颈等问题。通常环境下&#xff0c;主从复制、哨兵模式、Redis…...

大语言模型控制生成的过程Trick:自定义LogitsProcessor实践

前言 在大模型的生成过程中&#xff0c;部分原生的大语言模型未经过特殊的对齐训练&#xff0c;往往会“胡说八道”的生成一些敏感词语等用户不想生成的词语&#xff0c;最简单粗暴的方式就是在大模型生成的文本之后&#xff0c;添加敏感词库等规则手段进行敏感词过滤&#xf…...

Docker容器:docker的资源控制及docker数据管理

文章目录 一.docker的资源控制1.CPU 资源控制1.1 资源控制工具1.2 cgroups有四大功能1.3 设置CPU使用率上限1.4 进行CPU压力测试1.5 设置50%的比例分配CPU使用时间上限1.6 设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09;1.6.1 两个容器测试cpu1.6.2 设置容器绑…...

从零开始打造家装预约咨询小程序

在如今互联网高度发达的时代&#xff0c;家装行业也逐渐意识到了线上渠道的重要性。为了更好地服务客户&#xff0c;提高用户体验&#xff0c;越来越多的家装公司开始寻找合适的小程序制作平台。本文将向大家介绍如何使用第三方制作平台&#xff0c;如乔拓云网&#xff0c;打造…...

es线上处理命令记录

常用命令 搜索 GET _search {"query": {"match_all": {}} }获取全部模版 GET _index_template GET _index_template/yst_crawler_template获取全部索引 GET /_cat/indices?v 获取当前mapping GET /yst_crawler/_mapping创建一个mapping PUT /yst_c…...

mysql 在nodejs中的简单使用(增删改查)

一 、封装SQL查询请求链接 const mysql require(mysql) //创建开发工具数据库链接池 const pool mysql.createPool({host: 192.168.1.133,user: user_name, password: 123456,database: database_name,port: 3306,connectionLimit: 50 // 限制连接数 });// sql&#xff1a;查…...

1.MySQL数据库的基本操作

数据库操作过程&#xff1a; 1.用户在客户端输入 SQL 2.客户端会把 SQL 通过网络发送给服务器 3.服务器执行这个 SQL,把结果返回给客户端 4.客户端收到结果,显示到界面上 数据库的操作 这里的数据库不是代表一个软件&#xff0c;而是代表一个数据集合。 显示当前的数据库 …...

Zabbix-6.4.4 邮箱告警SMS告警配置

目录 ​------------------------- # 邮箱告警 ---------------------------------- 1.安装mailx与postfix软件包 2.修改mailx配置文件 3. 创建文件夹 4. 编写mail-send.sh脚本 5. 将该脚本赋予执行权限 6. 进入web界面进行设置—> Alerts —> Media Types 7. 添…...

网络安全 Day30-运维安全项目-容器架构上

容器架构上 1. 什么是容器2. 容器 vs 虚拟机(化) :star::star:3. Docker极速上手指南1&#xff09;使用rpm包安装docker2) docker下载镜像加速的配置3) 载入镜像大礼包&#xff08;老师资料包中有&#xff09; 4. Docker使用案例1&#xff09; 案例01&#xff1a;:star::star::…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...