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

【C++ • STL • 力扣】详解string相关OJ

文章目录

  • 1、仅仅翻转字母
  • 2、字符串中的第一个唯一字符
  • 3、字符串里最后一个单词的长度
  • 4、验证一个字符串是否是回文
  • 5、字符串相加
  • 总结


ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ"
在是图片描是小刘述


1、仅仅翻转字母

力扣链接
代码1展示:【下标】


class Solution {
bool isLetter(const char& c)
{if (c >= 'a' && c <= 'z')return true;else if (c >= 'A' && c <= 'Z')return true;elsereturn false;
}
public:string reverseOnlyLetters(string s){int left = 0;int right = s.size() - 1;while (left < right){while (left < right && !isLetter(s[left])){left++;}while (left < right && !isLetter(s[right])){right--;}swap(s[left], s[right]);++left;--right;}        return s;}
};

代码2展示:【迭代器】

class Solution {
bool isLetter(const char& c)
{if (c >= 'a' && c <= 'z')return true;else if (c >= 'A' && c <= 'Z')return true;elsereturn false;
}
public:string reverseOnlyLetters(string s){string::iterator leftIt = s.begin();string::iterator rightIt = s.end() - 1;while (leftIt < rightIt){while (leftIt < rightIt && !isLetter(*leftIt)){leftIt++;}while (leftIt < rightIt && !isLetter(*rightIt)){rightIt--;}swap(*leftIt, *rightIt);++leftIt;--rightIt;}        return s;}
};

思路:快速排序中的单趟排序

知识点:C++库提供了swap的函数,可以直接调用。

2、字符串中的第一个唯一字符

力扣链接
代码展示

class Solution {
public:int firstUniqChar(string s) {int count[26] = { 0 };for (auto ch : s){count[ch - 'a']++;}for (size_t i = 0; i < s.size(); i++){if (count[s[i] - 'a'] == 1){return i;}}return -1;}
};

思路:计数排序的思想

3、字符串里最后一个单词的长度

牛客链接
代码展示

#include <iostream>
using namespace std;int main()
{string s;getline(cin, s);size_t pos = s.rfind(' ');if (pos != string::npos){cout << s.size() - (pos + 1);}else {cout << s.size();}return 0;
}

思路:首先得到倒数第一个空格的下标,然后size进行减去(下标+1)

知识点:cin遇见空格会认为获取结束,当遇见一行字符串的时候,该字符串中间有空格,那么就不会获取到整行的字符串。getline会获取一行的字符串,遇到空格也不会认为获取终止。

4、验证一个字符串是否是回文

力扣链接
代码展示

class Solution {
public:bool isLetterOrNumber(char ch){return (ch >= '0' && ch <= '9')|| (ch >= 'a' && ch <= 'z')|| (ch >= 'A' && ch <= 'Z');}bool isPalindrome(string s) {//小写换成大写for(auto& ch : s){if (ch >= 'a' && ch <= 'z'){ch -= 32;}}int begin = 0;int end = s. size() - 1;while (begin < end){while(begin < end && !isLetterOrNumber(s[begin])){++begin;}while(begin < end && !isLetterOrNumber(s[end])){--end;}if(s[begin] != s[end]){return false;}else{++begin;--end;}}return true;}
};

5、字符串相加

力扣链接
代码1展示:(头插)

class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1;int end2 = num2.size() - 1;int carry = 0;//进位string s;while (end1 >= 0 || end2 >= 0){//字符转换为数字int val1 = end1 >= 0 ? num1[end1] - '0' : 0;int val2 = end2 >= 0 ? num2[end2] - '0' : 0;int ret = val1 + val2 + carry;if (ret >= 10){ret -= 10;carry = 1;}else{carry = 0;}s.insert(s.begin(), ret + '0');end1--;end2--;}if (carry == 1){s.insert(s.begin(), '1');}return s;}
};

这个代码,使用头插,时间复杂度为O(N^2),算法不是最优的
代码2展示

class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1;int end2 = num2.size() - 1;int carry = 0;//进位string s;while (end1 >= 0 || end2 >= 0){//字符转换为数字int val1 = end1 >= 0 ? num1[end1] - '0' : 0;int val2 = end2 >= 0 ? num2[end2] - '0' : 0;int ret = val1 + val2 + carry;if (ret >= 10){ret -= 10;carry = 1;}else{carry = 0;}//s.insert(s.begin(), ret + '0');s += (ret + '0');end1--;end2--;}if (carry == 1){s += '1';//s.insert(s.begin(), '1');}reverse(s.begin(), s. end());return s;}
};

思路:倒着进行加法运算,当两个字符串的位数不一样的时候,位数少的前面进行补0【两个字符串都结束的时候才可以认为结束。【注意下标问为0的位置的进位】】

知识点:大数运算(当一个数字非常大的时候,可以用字符串的形式进行存放),字符串是不能进行加减运算的。此时就需要我们写代码。


总结

以上就是今天要讲的内容,本文详细的介绍了string的OJ题。希望给友友们带来帮助!

相关文章:

【C++ • STL • 力扣】详解string相关OJ

文章目录 1、仅仅翻转字母2、字符串中的第一个唯一字符3、字符串里最后一个单词的长度4、验证一个字符串是否是回文5、字符串相加总结 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)&#xff89;" 1、仅仅翻转字母 力扣链接 代码1展示&…...

【Tomcat服务部署及优化】

Tomcat 一、什么是Tomcat?二、Tomcat 核心组件2.1 Tomcat 组件2.3 Container组件的结构2.4 Tomcat 请求过程 三、Tomcat 部署3.1 安装JDK3.2 设置JDK环境变量3.3 安装Tomcat并用supervisor启动解压添加到supervisord服务测试能否通过supervisorctl启动 四、Tomcat的端口和主要…...

C++之红黑树

红黑树 红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入红黑树的验证红黑树与AVL树的比较 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上…...

Go语言网络编程(socket编程)TCP

1、TCP编程 1.1.1 Go语言实现TCP通信 TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议&#xff0c;是一种面向连接&#xff08;连接导向&#xff09;的、可靠的、基于字节流的传输层&#xff08;Transport layer&#xff09;通信协…...

C语言——局部和全局变量

局部变量 定义在函数内部的变量称为局部变量&#xff08;Local Variable&#xff09; 局部变量的作用域(作用范围)仅限于函数内部&#xff0c; 离开该函数后是无效的 离开该函数后&#xff0c;局部变量自动释放 示例代码&#xff1a; #include <stdio.h>// 函数定义 …...

【Java基础篇 | 类和对象】--- 聊聊什么是内部类

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 前言 当一个事物的内部&…...

合宙Air724UG LuatOS-Air LVGL API控件-页面 (Page)

页面 (Page) 当控件内容过多&#xff0c;无法在屏幕内完整显示时&#xff0c;可让其在 页面 内显示。 示例代码 page lvgl.page_create(lvgl.scr_act(), nil) lvgl.obj_set_size(page, 150, 200) lvgl.obj_align(page, nil, lvgl.ALIGN_CENTER, 0, 0)label lvgl.label_crea…...

mongodb数据库操作

1、启动mongodb /usr/local/mongodb/bin/mongod --dbpath /var/mongodb/data/--logpath /var/mongodb/logs/log.log &在mongodb启动命令中 --dbpath 指定mongodb的数据存储路径 --logpath 指定mongodb的日志存储路径 2、停止mongodb 第一步先进入mongo命令行模式 第二…...

第 2 章 线性表 ( 双链循环线性表(链式存储结构)实现)

1. 背景说明 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_NULL(pointer) if (!(pointer)) { \printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ERR_NULL_PTR…...

redis在日常开发工作中的常见用法

redis是一款内存型数据库&#xff0c;在开发工作中经常用到&#xff0c;功能强大&#xff1b; 特别开一篇文章用来记录一下它的常见用法&#xff0c;算是一种总结&#xff1b; 它最主要的特点就是高可用的&#xff0c;速度快&#xff0c;分布式&#xff1b;有人说速度快&…...

小程序实现下拉刷新

小程序实现下拉刷新可以通过使用组件scroll-view和事件onPullDownRefresh来实现。 scroll-view组件的使用 在需要下拉刷新的页面的wxml文件中&#xff0c;通过scroll-view组件包裹需要滚动的内容&#xff0c;设置scroll-y属性为true&#xff0c;表示允许竖向滚动。示例代码如…...

Day 36 贪心算法 part05 : 435. 无重叠区间 763.划分字母区间 56. 合并区间

56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;inte…...

使用Python将网页数据保存到NoSQL数据库的方法和示例

随着大数据和人工智能技术的快速发展&#xff0c;对于大规模数据的处理需求日益增多。NoSQL数据库作为一种新兴的数据存储解决方案&#xff0c;具有高可扩展性、高性能和灵活性数据模型等优势&#xff0c;已经在许多行业得到广泛应用。传统的关系型数据库在处理海量数据时可能会…...

两个路由器如何连接设置的方法攻略

一、前言 随着智能家居时代来临&#xff0c;家里的网络部署需求开始复杂起来。往往一个路由器已经不能满足需求或者不利于拓展。两个路由器连接最常见的情况是家中已有一个路由器&#xff0c;并且已经通过这个路由器来正常上网。现在是因某些原因想在不改变已经在用的路由器的设…...

分类任务评价指标

分类任务评价指标 分类任务中&#xff0c;有以下几个常用指标&#xff1a; 混淆矩阵准确率&#xff08;Accuracy&#xff09;精确率&#xff08;查准率&#xff0c;Precision&#xff09;召回率&#xff08;查全率&#xff0c;Recall&#xff09;F-scorePR曲线ROC曲线 1. 混…...

c++静态成员

目录 静态成员 静态成员变量 静态成员函数 const 静态成员属性 静态成员实现单例模式 静态成员 在类定义中&#xff0c;它的成员&#xff08;包括成员变量和成员函数&#xff09;&#xff0c;这些成员可以用关键字 static 声明为静态的&#xff0c;称为静态成员。 不管这…...

go-zero直连与etcd服务注册中心

go-zero中直连方式 在使用grpc是最重要的就是pb文件了&#xff0c;生成的pb文件&#xff0c;通过pb文件可以生成grpc的客户端和服务端&#xff0c;那么客户端和服务端就可以直连了&#xff0c;再次基础上可以引入etcd实现服务注册。 所有的代码都需要开发者编写&#xff0c;包…...

Kotlin File writeText appendText appendBytes readBytes readText

Kotlin File writeText appendText appendBytes readBytes readText import java.io.Filefun main(args: Array<String>) {val filePath "./myfile.txt"val file File(filePath)file.writeText("hello,") //如果原有文件有内容&#xff0c;将完全覆…...

常见缺少msvcp140.dll问题及解决方法,分享多种方法帮你解决

在日常使用电脑的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;比如电脑提示msvcp140.dll文件丢失。这个问题通常是由于某些程序或游戏需要这个dll文件来正常运行&#xff0c;但是由于某种原因&#xff0c;这个文件被误删或者损坏了。那么&#xff0c;如何解决这个问题…...

【K210+ESP8266图传上位机开发】TCP server + JPEG图像解析上位机开发

本文章主要记录基于 【K210-ESP8266】 图传和显示的过程&#xff0c;上位机开发过程&#xff0c;系统架构和下位机开发请参考文章&#xff1a; 【K210-ESP8266】开发板上传图像数据到服务器并实时显示 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化&#xff1f; 在数据科学和分析领域&#xff0c;可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 内置的可视化功能因其与数据结…...

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景&#xff08;Scene&#xff09; 使用 THREE.Scene(…...

MeanFlow:何凯明新作,单步去噪图像生成新SOTA

1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架&#xff0c;旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念&#xff0c;这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换&#xff0c;显…...

Python打卡训练营学习记录Day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

DL00871-基于深度学习YOLOv11的盲人障碍物目标检测含完整数据集

基于深度学习YOLOv11的盲人障碍物目标检测&#xff1a;开启盲人出行新纪元 在全球范围内&#xff0c;盲人及视觉障碍者的出行问题一直是社会关注的重点。尽管技术不断进步&#xff0c;许多城市的无障碍设施依然未能满足盲人出行的实际需求。尤其是在复杂的城市环境中&#xff…...