rust学习笔记7-344. 反转字符串

devtools/2025/3/1 21:55:16/

今天学习两个类型字符串String和字符串切片(&str)

字符串String是一个堆分配的可变字符串类型

源码

pub struct String {

    vec: Vec<u8>,

}

字符串切片(&str)本质上是一个动态大小的字符串切片,它表示对一段 UTF-8 编码的字符串的不可变视图。

二者区别

特性&strString
存储位置字符串字面值直接存储在程序的静态数据段中(不可变)。动态分配在堆上,大小可以调整。
大小动态大小(DST,动态大小类型),无法直接存储在栈上,需要通过引用使用(如 &str)。堆分配的可变字符串,大小可以调整。
可变性不可变,内容无法更改。可变,内容可以增删改。
所有权无所有权,通常是一个引用(&str)。有所有权,负责管理自己的内存生命周期。
    //声明一个字符串let s = String::new();        // 一个空字符串let s = "Hello".to_string();let s = String::from("world");let s: String = "also this".into();//声明一个字符串切片let s1: &str = "Hello, World"; // 存储在静态内存区域

344. 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
 

提示:

1 <= s.length <= 105
s[i] 都是 ASCII 码表中的可打印字符

pub fn reverse_string(s: &mut Vec<char>) {let mut left = 0;let mut rigth = s.len() - 1;while left < rigth {let temp = s[left];s[left] = s[rigth];s[rigth] = temp;//Rust 不支持i++ 和i--left +=1;rigth -=1;}}
fn main() {let mut s: Vec<char> = vec!['h','e','l','l','o'];reverse_string(&mut s); //传递可变引用println!("{:?}", s);}

总结 本题也是一道算法基础题,与其他语言相比有两点注意的地方,

1.Rust 不支持i++ 和i--,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力,但对于会其他语言如Java、Python的同学来讲,初期有点不适应。

2.函数传参 (1)直接 reverse_string(s);//这样所有权就转移,不行,(2) reverse_string(&s);// 传递不可变引用,这样干也不行,(3) reverse_string(&mut s);//传递可变引用, 正确


http://www.ppmy.cn/devtools/163740.html

相关文章

【算法】MySQL算法

第二高薪水 本题求Employee表中的第二高的不同薪水&#xff0c;也就是说如果Employee表是&#xff1a; 则第二高的薪水是2000。 题目要求输出的格式是&#xff1a; 对应的sql语句&#xff1a; 该语句的执行顺序&#xff1a; 1.从Eomployee表中选取所有行。 2.对salary列进行…

Centos7源码编译安装Sqlite最新版本

下载源码 https://www.sqlite.org/download.html 复制下载链接&#xff0c;然后用 wget 下载 wget https://www.sqlite.org/2025/sqlite-autoconf-3490100.tar.gz 解压缩编译安装 tar -zxf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefi…

编程小白冲Kaggle每日打卡(17)--kaggle学堂:<机器学习简介>随机森林

Kaggle官方课程链接&#xff1a;Random Forests 本专栏旨在Kaggle官方课程的汉化&#xff0c;让大家更方便地看懂。 Random Forests 使用更复杂的机器学习算法。 介绍 决策树给你留下了一个艰难的决定。一棵有很多叶子的深树会被过度拟合&#xff0c;因为每一个预测都来自它…

GD32F450 使用

GB32F450使用 1. 相关知识2. 烧写程序3. SPI3.1 spi基础3.2 spi代码 4. 串口4.1 串口引脚4.2 串口通信代码 问题记录1. 修改晶振频率 注意&#xff1a;GD32F450 总共有三种封装形式&#xff0c;本文所述的相关代码和知识&#xff0c;均为 GD32F450IX 系列。 1. 相关知识 参数配…

labview中VISA串口出现异常的解决方案

前两天在做项目时发现&#xff0c;当用VISA串口读取指令时出现了回复异常的情况&#xff0c;不管发什么东西就一直乱回&#xff0c;针对这个情况&#xff0c;后面在VISA串口中加了一个VISA寄存器清零的函数。加了之后果然好多了&#xff0c;不会出现乱回的情况&#xff0c;但是…

Spring Boot 实战:轻松实现文件上传与下载功能

目录 一、引言 二、Spring Boot 文件上传基础 &#xff08;一&#xff09;依赖引入 &#xff08;二&#xff09;配置文件设置 &#xff08;三&#xff09;文件上传接口编写 &#xff08;一&#xff09;文件类型限制 &#xff08;二&#xff09;文件大小验证 &#xff0…

docker简介-学习与参考

docker Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱…

在AI中,tokens是自然语言处理(NLP)的基本单位,用于文本的分割和处理。

在AI中&#xff0c;tokens是自然语言处理&#xff08;NLP&#xff09;的基本单位&#xff0c;用于文本的分割和处理。‌ Tokens可以是单个单词、字符、子词或标点符号&#xff0c;具体形式取决于使用的分词方法。‌12 Tokens在AI模型中的作用 ‌文本处理‌&#xff1a;在AI模…