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

Leetcode之string

目录

  • 前言
  • 1. 字符串相加
  • 2. 仅仅反转字母
  • 3. 字符串中的第一个唯一字符
  • 4. 字符串最后一个单词的长度
  • 5. 验证回文串
  • 6. 反转字符串Ⅱ
  • 7. 反转字符串的单词Ⅲ
  • 8. 字符串相乘
  • 9. 打印日期

前言

本篇整理了一些关于string类题目的练习, 希望能够学以巩固.

博客主页: 酷酷学!!! 点击关注~


1. 字符串相加

在这里插入图片描述

题目思路:
本题为大数运算类型题目, 不能用于处理大整数的库, 但可以使用一般的算术运算, 我们进行模拟, 首先依次取出每个数字的最后一位,进行加法运算, 并且将值分为进位和数值, 第一次的进位next = 0 , 这里只有当num1和num2都结束才能结束循环, 例如下面999999999+1, 如果其中一个数字已经结束, 则在高位补0, 并且将每一次的值追加到答案字符串, 循环结束, 如果进位还有值, 也追加到结束字符串, 最后逆置字符串.

在这里插入图片描述

参考代码:

class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1;int end2 = num2.size() - 1;string str;int next = 0;while (end1 >= 0 || end2 >= 0) {int x1 = end1 >= 0 ? num1[end1] - '0' : 0;int x2 = end2 >= 0 ? num2[end2] - '0' : 0;int x = x1 + x2 + next;next = x / 10;x = x % 10;str += (x + '0');end1--;end2--;}if (next == 1) {str += '1';}reverse(str.begin(), str.end());return str;}
};

2. 仅仅反转字母

在这里插入图片描述

题目思路:

首先题目要求仅仅反转字符, 字母包括大写字母和小写字母, 其余位置不动, 那么我们就需要先判断什么元素需要反转, 首先判断是否为字母, 定义双指针, 如果相遇则结束, 遇到字母开始进行位置交换, 之后进行下一轮交换.

参考代码:

class Solution {
public:bool isZm(char c){if((c <= 'z'&& c>='a')||(c <= 'Z' && c>= 'A')){return true;}else{return false;}}string reverseOnlyLetters(string s) {int begin = 0;int end = s.size() - 1;while(begin < end){if(!isZm(s[begin])){begin++;}if(!isZm(s[end])){end--;}if(isZm(s[begin])&&isZm(s[end])){char tmp = s[begin];s[begin] = s[end];s[end] = tmp;begin++;end--;}}return s;}
};

3. 字符串中的第一个唯一字符

在这里插入图片描述
题目思路:

首先题目给出了条件, 仅包含小写字母, 我们可以采用计数排序的思想, 将出现的字母次数记录下来, 之后重新遍历字符串, 然后找到第一次出现一次的字符串, 这里需要注意对应的下标.

参考代码:

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

4. 字符串最后一个单词的长度

在这里插入图片描述

题目思路:

首先题目指出, 字符串以空格分隔, 并且不以空格结尾, 可以使用字符串的成员函数, 从后往前寻找, 找到空格的位置, 即为最后一个字符串的分割位置, 使用成员函数substr进行字符串分割, 从pos+1位置,不传第二个参数默认到字符串结尾, 随后输出字符串长度即可.

参考代码:

#include <iostream>
#include<string>
using namespace std;int main() {string s;cin>>s;size_t pos = s.rfind(' ');string s2;s2 = s.substr(pos+1);cout<<s2.size()<<endl;
}

5. 验证回文串

在这里插入图片描述
题目思路:

首先题目中给出所需要判断回文的为大小写字母以及数字, 不区分大小写, 正反读都一样, 即为回文串, 那么我们可以直接先将大写字母转化为小写字母, 接着定义双指针, 从头尾遍历, 相遇结束, 如果是字母和数字则判断下标位置的字符是否相同, 如果相同即为回文.

参考代码:

class Solution {
public:bool isZm(char c){if((c>='a'&&c<='z')||(c<='9'&&c>='0')){return true;}return false;}bool isPalindrome(string s) {for(int i = 0 ; i < s.size() ; ++i){if(s[i]<='Z'&&s[i]>='A'){s[i] += 32;}}int begin = 0;int end = s.size()-1;while(begin<end){while(!isZm(s[begin])){begin++;}while(!isZm(s[end])){end--;}if(s[begin]==s[end]){begin++;end--;}else{return false;}}return true;}
};

6. 反转字符串Ⅱ

在这里插入图片描述
题目思路: 首先题目要求每2k个字符, 若这段区间少于k个字符, 则全部反转, 若大于或等于k个字符, 则反转前k个字符, 于是乎我们进行模拟实现, 首先将字符串划分为每次2k的小区间, 判断此区间如果不是字符串结尾则反转前k个, 若是字符串结尾, 则判断最后一个区间是否小于k个字符, 如果最后剩余的字符个数小于k, 则全部反转, 如果大于, 则反转前k个.

参考代码:

class Solution {
public:string reverseStr(string s, int k) {int size = s.size();//min()里面接受参数为变量for(int i = 0; i< s.size(); i+= 2*k){reverse(s.begin()+i,s.begin()+min(i+k,size));}return s;}
};

7. 反转字符串的单词Ⅲ

在这里插入图片描述

题目思路:

本题没有良好的区间划分, 我们不能用上题的思路进行求解, 首先题目要求反转字符串的单词, 那我们需要找到每个单词, 遍历字符串, 找到字符串分割符, 然后取出单词的区间, 将字符依次进行交换, 完成反转, 控制i的位置并维护这段区间, 将单词进行反转.

参考代码:

class Solution {
public:string reverseWords(string s) {int i = 0;while(i<s.size()){int start = i;while(i<s.size() && s[i] != ' '){i++;}int begin = start;int end = i - 1;while(begin < end){swap(s[begin++] , s[end--]);}while(i < s.size() && s[i] == ' '){i++;}}return s;}
};

8. 字符串相乘

在这里插入图片描述

题目思路:

模拟数字乘法, 如果其中有一个为0直接返回0, 然后取出依次乘数的最后一位将结果范围底数和进位, 分别进行运算, 再依次取出被乘数, 但是在运算过程中, 除了最后一个数字相乘时, 其他都需要补0, 并将结果尾插到字符串中, 然后进行反转, 每一次躺求的结果进行加法, 可以根据我们实现加法的方法 , 最后返回结果.

参考代码:

class Solution {
public:string multiply(string num1, string num2) {string ans = "0";if (num1 == "0" || num2 == "0") {return "0";}int m = num1.size(), n = num2.size();for (int i = n - 1; i >= 0; i--) // 相乘多少次{int add = 0;string cur; // 记录每趟相乘结果for (int j = n - 1; j > i; j--) {cur.push_back(0);}int y = num2[i] - '0';for (int j = m - 1; j >= 0; j--) {int x = num1[j] - '0';int product = x * y + add;cur.push_back(product % 10);add = product / 10;}if (add != 0)cur.push_back(add);reverse(cur.begin(), cur.end());for (auto& c : cur) {c += '0';}ans = Stringadd(cur, ans);}return ans;}string Stringadd(string& num1, string& num2) {int i = num1.size() - 1, j = num2.size() - 1;int add = 0;string ansl;while (i >= 0 || j >= 0 || add) {int x = i >= 0 ? num1[i--] - '0' : 0;int y = j >= 0 ? num2[j--] - '0' : 0;int result = x + y + add;ansl.push_back(result % 10);add = result / 10;}for (auto& c : ansl) {c += '0';}reverse(ansl.begin(), ansl.end());return ansl;}
};

9. 打印日期

在这里插入图片描述

题目思路:

自一月开始, 如果天数小于当前月份最大天数, 则直接格式化输出, 如果天数大于当前月份最大天数, 则减去当前月份的天数, 进入下一个月份, 这里需要判断闰年, 如果为闰年, 则天数为29天.

参考代码:

#include <iostream>
using namespace std;int main() {int year,count;while (cin >> year >> count) { // 注意 while 处理多个 caseint months[12] = {31,28,31,30,31,30,31,31,30,31,30,31};if((year%4==0 && year % 100 !=0)||year % 400 ==0){months[1] = 29;}for(int i = 0;i < 12 ;i++){if(count <= months[i]){printf("%04d-%02d-%02d\n", year, i + 1, count);break;}else{count -= months[i];}}}
}

相关文章:

Leetcode之string

目录 前言1. 字符串相加2. 仅仅反转字母3. 字符串中的第一个唯一字符4. 字符串最后一个单词的长度5. 验证回文串6. 反转字符串Ⅱ7. 反转字符串的单词Ⅲ8. 字符串相乘9. 打印日期 前言 本篇整理了一些关于string类题目的练习, 希望能够学以巩固. 博客主页: 酷酷学!!! 点击关注…...

OS:处理机进程调度

1.BackGround&#xff1a;为什么要进行进程调度&#xff1f; 在多进程环境下&#xff0c;内存中存在着多个进程&#xff0c;其数目往往多于处理机核心数目。这就要求系统可以按照某种算法&#xff0c;动态的将处理机CPU资源分配给处于就绪状态的进程。调度算法的实质其实是一种…...

【车辆轨迹处理】python实现轨迹点的聚类(一)——DBSCAN算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、单辆车轨迹的聚类与分析1.引入库2.聚类3.聚类评价 二、整个数据集多辆车聚类1.聚类2.整体评价 前言 空间聚类是基于一定的相似性度量对空间大数据集进行分组…...

Apache Kylin

Apache Kylin 是一个开源的分布式分析引擎&#xff0c;提供 SQL 查询接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据集。它能在亚秒级的时间内提供 PB 级数据的查询能力&#xff0c;非常适合大数据分析和报表系统。 ### 入门指南 #### 1. 环境准备 首先…...

为何Vue3比Vue2快

Proxy响应式 PatchFlag 编译模板时&#xff0c;动态节点做标记标记&#xff0c;分为不同的类型&#xff0c;如TEXT PROPSdiff算法时&#xff0c;可以区分静态节点&#xff0c;以及不同类型的动态节点 <div>Hello World</div> <span>{{ msg }}</span>…...

人工智能与社交变革:探索Facebook如何领导智能化社交平台

在过去十年中&#xff0c;人工智能&#xff08;AI&#xff09;技术迅猛发展&#xff0c;彻底改变了我们与数字世界互动的方式。Facebook作为全球最大的社交媒体平台之一&#xff0c;充分利用AI技术&#xff0c;不断推动社交平台的智能化&#xff0c;提升用户体验。本文将深入探…...

八股文之java基础

jdk9中对字符串进行了一个什么优化&#xff1f; jdk9之前 字符串的拼接通常都是使用进行拼接 但是的实现我们是基于stringbuilder进行的 这个过程通常比较低效 包含了创建stringbuilder对象 通过append方法去将stringbuilder对象进行拼接 最后使用tostring方法去转换成最终的…...

深度挖掘行情接口:股票市场中的关键金融数据API接口解析

在股票市场里&#xff0c;存在若干常见的股票行情数据接口&#xff0c;每一种接口皆具备独特的功能与用途。以下为一些常见的金融数据 API 接口&#xff0c;其涵盖了广泛的金融数据内容&#xff0c;其中就包含股票行情数据&#xff1a; 实时行情接口 实时行情接口&#xff1a…...

逆向破解 对汇编的 简单思考

逆向破解汇编非常之简单 只是一些反逆向技术非常让人难受 但网络里都有方法破解 申请变量 &#xff1a; int a 0; 00007FF645D617FB mov dword ptr [a],0 char b b; 00007FF645D61802 mov byte ptr [b],62h double c 0.345; 00007FF645D61…...

搜维尔科技:人机交互学术应用概览

人机交互学术应用概览 搜维尔科技&#xff1a;人机交互学术应用概览...

植物遗传转化相关介绍【卡梅德生物】

植物的遗传转化是指以植物器官、组织、细胞或原生质体作为受体&#xff0c;应用重组DNA技术&#xff0c;将外源基因导入植物基因组&#xff0c;以获得转基因植物的技术。目前应用最普遍的植物基因的遗传转化方法主要有农杆菌介导法和DNA直接转入法。 一&#xff0e;植物遗传转化…...

0711springNews新闻系统管理 实现多级评论

0611springmvc新闻系统管理-CSDN博客 0711springNews新闻系统管理项目包 实现多级评论-CSDN博客 数据库字段 需要添加父节点id&#xff0c;通过该字段实现父评论和子评论的关联关系。 对象属性 实现链表&#xff0c;通过一个父评论可以找到它对应的所有子孙评论。 业务层 实现…...

如何在Ubuntu上安装并启动SSH服务(Windows连接)

在日常的开发和管理工作中&#xff0c;通过SSH&#xff08;Secure Shell&#xff09;连接到远程服务器是一个非常常见的需求。如果你在尝试通过SSH连接到你的Ubuntu系统时遇到了问题&#xff0c;可能是因为SSH服务未安装或未正确配置。本文将介绍如何在Ubuntu上安装并启动SSH服…...

docker build时的网络问题

docker build时无法yum安装包&#xff0c;因为无法访问外网&#xff0c;无法ping通外网。 解决办法&#xff1a; systemctl stop NetworkManager.service firewall-cmd --permanent --zonetrusted --change-interfacedocker0 systemctl start NetworkManager.service systemct…...

Vue的安全性:防范XSS攻击与安全最佳实践

引言 随着Web应用的普及,前端安全问题日益受到重视。Vue作为当下流行的前端框架,其安全性也成为开发者关注的焦点。跨站脚本攻击(XSS)是常见的Web安全漏洞之一,本文将讨论如何在使用Vue时防范XSS攻击,并分享其他Vue中的安全最佳实践。 什么是XSS攻击? XSS攻击是一种将…...

ARM架构(一)—— ARMV8V9基础概念

目录 1.ARMCore的时间线2.ARM术语小结2.1 A64和arrch642.2ARM架构现在的5个系列2.3 微架构2.4 PE2.5 Banked2.6 ARM文档术语2.7 IMPLEMENTATION DEFINFD 和 DEPRECATED2.8 EL1t和EL1h 3 ARMv7的软件架构4 安全状态切换模型4.1 Secure state和Non-secure state介绍 5 Interproce…...

如何使用Python进行数据分析

Python是一种广泛应用于数据科学和机器学习领域的编程语言。本文将介绍如何使用Python进行数据分析&#xff0c;包括Python在数据分析中的应用场景、常用库和工具&#xff0c;以及实际案例分析。 一、Python在数据分析中的应用场景 数据清洗&#xff1a;处理缺失值、异常值&a…...

Python学习笔记40:游戏篇之外星人入侵(一)

前言 入门知识已经学完&#xff0c;常用标准库也了解了,pygame入门知识也学了&#xff0c;那么开始尝试小游戏的开发。 当然这个小游戏属于比较简单的小游戏&#xff0c;复杂的游戏需要长时间的编写累计开发经验&#xff0c;同时也需要一定的时间才能编写出来。现在的话还是嫩…...

R的数据集读取和利用,如何高效地直接复制黏贴数据到R

​​​​​​R语言自带了许多内部数据集,这些数据集不仅为初学者提供了丰富的练习资源,还为研究人员和数据分析师提供了方便的数据测试和模型验证工具。在这篇文章中,我们将详细探讨如何读取和使用数据集。 一、认识数据集 1、数据和数据集 数据(Data)是指以某种形式表示…...

@JsonProperty 踩坑

JsonProperty 在fastjson 和 hutooljson 中是不会生效的。 在 fastjson 中&#xff0c;对应的注解是 JSONField。如果你正在使用 fastjson 进行 JSON 的序列化和反序列化&#xff0c;并且想要改变字段的 JSON 属性名&#xff0c;你应该使用 JSONField 注解&#xff0c;而不是 …...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...