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:为什么要进行进程调度? 在多进程环境下,内存中存在着多个进程,其数目往往多于处理机核心数目。这就要求系统可以按照某种算法,动态的将处理机CPU资源分配给处于就绪状态的进程。调度算法的实质其实是一种…...
【车辆轨迹处理】python实现轨迹点的聚类(一)——DBSCAN算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、单辆车轨迹的聚类与分析1.引入库2.聚类3.聚类评价 二、整个数据集多辆车聚类1.聚类2.整体评价 前言 空间聚类是基于一定的相似性度量对空间大数据集进行分组…...
Apache Kylin
Apache Kylin 是一个开源的分布式分析引擎,提供 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据集。它能在亚秒级的时间内提供 PB 级数据的查询能力,非常适合大数据分析和报表系统。 ### 入门指南 #### 1. 环境准备 首先…...
为何Vue3比Vue2快
Proxy响应式 PatchFlag 编译模板时,动态节点做标记标记,分为不同的类型,如TEXT PROPSdiff算法时,可以区分静态节点,以及不同类型的动态节点 <div>Hello World</div> <span>{{ msg }}</span>…...
人工智能与社交变革:探索Facebook如何领导智能化社交平台
在过去十年中,人工智能(AI)技术迅猛发展,彻底改变了我们与数字世界互动的方式。Facebook作为全球最大的社交媒体平台之一,充分利用AI技术,不断推动社交平台的智能化,提升用户体验。本文将深入探…...
八股文之java基础
jdk9中对字符串进行了一个什么优化? jdk9之前 字符串的拼接通常都是使用进行拼接 但是的实现我们是基于stringbuilder进行的 这个过程通常比较低效 包含了创建stringbuilder对象 通过append方法去将stringbuilder对象进行拼接 最后使用tostring方法去转换成最终的…...
深度挖掘行情接口:股票市场中的关键金融数据API接口解析
在股票市场里,存在若干常见的股票行情数据接口,每一种接口皆具备独特的功能与用途。以下为一些常见的金融数据 API 接口,其涵盖了广泛的金融数据内容,其中就包含股票行情数据: 实时行情接口 实时行情接口:…...
逆向破解 对汇编的 简单思考
逆向破解汇编非常之简单 只是一些反逆向技术非常让人难受 但网络里都有方法破解 申请变量 : int a 0; 00007FF645D617FB mov dword ptr [a],0 char b b; 00007FF645D61802 mov byte ptr [b],62h double c 0.345; 00007FF645D61…...
搜维尔科技:人机交互学术应用概览
人机交互学术应用概览 搜维尔科技:人机交互学术应用概览...
植物遗传转化相关介绍【卡梅德生物】
植物的遗传转化是指以植物器官、组织、细胞或原生质体作为受体,应用重组DNA技术,将外源基因导入植物基因组,以获得转基因植物的技术。目前应用最普遍的植物基因的遗传转化方法主要有农杆菌介导法和DNA直接转入法。 一.植物遗传转化…...
0711springNews新闻系统管理 实现多级评论
0611springmvc新闻系统管理-CSDN博客 0711springNews新闻系统管理项目包 实现多级评论-CSDN博客 数据库字段 需要添加父节点id,通过该字段实现父评论和子评论的关联关系。 对象属性 实现链表,通过一个父评论可以找到它对应的所有子孙评论。 业务层 实现…...
如何在Ubuntu上安装并启动SSH服务(Windows连接)
在日常的开发和管理工作中,通过SSH(Secure Shell)连接到远程服务器是一个非常常见的需求。如果你在尝试通过SSH连接到你的Ubuntu系统时遇到了问题,可能是因为SSH服务未安装或未正确配置。本文将介绍如何在Ubuntu上安装并启动SSH服…...
docker build时的网络问题
docker build时无法yum安装包,因为无法访问外网,无法ping通外网。 解决办法: 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进行数据分析,包括Python在数据分析中的应用场景、常用库和工具,以及实际案例分析。 一、Python在数据分析中的应用场景 数据清洗:处理缺失值、异常值&a…...
Python学习笔记40:游戏篇之外星人入侵(一)
前言 入门知识已经学完,常用标准库也了解了,pygame入门知识也学了,那么开始尝试小游戏的开发。 当然这个小游戏属于比较简单的小游戏,复杂的游戏需要长时间的编写累计开发经验,同时也需要一定的时间才能编写出来。现在的话还是嫩…...
R的数据集读取和利用,如何高效地直接复制黏贴数据到R
R语言自带了许多内部数据集,这些数据集不仅为初学者提供了丰富的练习资源,还为研究人员和数据分析师提供了方便的数据测试和模型验证工具。在这篇文章中,我们将详细探讨如何读取和使用数据集。 一、认识数据集 1、数据和数据集 数据(Data)是指以某种形式表示…...
@JsonProperty 踩坑
JsonProperty 在fastjson 和 hutooljson 中是不会生效的。 在 fastjson 中,对应的注解是 JSONField。如果你正在使用 fastjson 进行 JSON 的序列化和反序列化,并且想要改变字段的 JSON 属性名,你应该使用 JSONField 注解,而不是 …...
业务架构、数据架构、应用架构和技术架构分析
一文看懂:什么是业务架构、数据架构、应用架构和技术架构 TOGAF(开放集团架构框架)是企业广泛应用的架构设计和管理利器。其核心在于四大架构领域:业务、数据、应用和技术,助力组织高效运作。TOGAF,让架构设…...
android studio中svn的使用
第一步,建立一个项目。 第二步,share project。 第三步,选择存放的位置,然后添加提交信息,最后点击share。这样就可以在svn上面看到一个空的项目名称。 第四步,看到文件变成了绿色,点击commit图…...
敏捷CSM认证:精通敏捷Scum估算方法,高效完成项目!
咱们做项目的时候可能都遇到过这种情况:项目一开始信心满满,觉得 deadline 稳了。结果呢?各种意外状况频出,时间好像怎么都不够用了,最后项目只能无奈延期,整个团队都像霜打的茄子。 说到底,还…...
三、建造者模式
文章目录 1 基本介绍2 案例2.1 Car 类2.2 CarBuilder 抽象类2.3 EconomyCarBuilder 类2.4 LuxuryCarBuilder 类2.5 CarDirector 类2.6 测试程序2.7 测试结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 Product ( 产品 )3.1.2 Builder ( 抽象建造者 )3.1.3 ConcreteBuilder ( 具…...
MySQL-----索引
一、什么是索引 存储引擎用于快速找到记录的一种数据结构。 索引类似于目录。就比如我们要找书里的一段话,我们先按目录找,然后再具体定位,这样速度会很快。 二、索引的作用 通过创建唯一性索引,可以保证数据库表中每一行数据的…...
Webpack 5 Tree Shaking与Module Federation
Webpack是一个流行的JavaScript模块打包器,它在前端工程化中扮演着核心角色。Webpack 5引入了许多新特性,其中两个最值得关注的是Tree Shaking和Module Federation。这两个特性分别解决了代码体积优化和微前端架构的问题。接下来,我们将深入探…...
免费分享一套微信小程序图书馆座位预约管理系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】,帅呆了~~
大家好,我是java1234_小锋老师,看到一个不错的微信小程序图书馆座位预约管理系统(SpringBoot后端Vue管理端),分享下哈。 项目介绍 随着移动互联网技术的飞速发展和智能设备的普及,图书馆服务模式正在经历深刻的变革。本论文旨在…...
k8s入门:从安装到实际应用
Kubernetes (K8s) 入门指南:从安装到实际应用 Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。它能帮助你管理多个容器化应用程序,并确保它们在不同环境下的一致性和可用性。本文将介绍如何在本地环境安…...
基于Qt的上位机通用框架
0.前言 最近一年多的时间一直在开发设备控制相关的软件,加上之前在聚光的两年时间,前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架,核心思想类似于C#的依赖注入,对象的初始化都…...
Vulnhub靶场DC-7练习
目录 0x00 准备0x01 主机信息收集0x02 站点信息收集1. 获取用户名/密码2. ssh连接目标主机3. drush命令修改Drupal密码 0x03 漏洞查找与利用1. Drupal写入php木马2. 连接shell3. 反弹shell并提权 0x04 总结 0x00 准备 下载链接:https://download.vulnhub.com/dc/DC-…...
江阴建设网站/网络安全培训
springboot项目使用ajax上传头像回显先上效果图:开始上传点击提交环境:springboot2.2.5.RELEASEjdk:1.8thymeleaf:3.0.4.RELEASEspringboot项目是jar包运行的,采用的嵌入式的tomcat.所以图片的存储不再像以前war包方式。解决方案&…...
织梦网站怎么做伪静态页面/百度seo效果怎么样
1、端口、域名、IP地址 IP地址:XXX.XXX.XXX.XXX (四段,每段都是0到255) 端口:用来区分电脑上特定应用网络应用程序 域名简单说就是IP地址的别名(IP地址跟域名是绑定关系,一个域名对应一个IP…...
中国最好的网站器域名统一/搜索指数分析
为了更好的阅读体验,可以前往语雀 查看原文G2 是一个基于图形语法,面向数据分析的统计图表引擎。G2Plot 是在 G2 基础上,屏蔽复杂概念的前提下,保留 G2 强大图形能力,封装出业务上常用的统计图表库。G2Plot 是一个基于…...
建立网站时服务器的基本配置有哪些/凤凰军事新闻最新消息
Unity - 序列化 ScriptableObject、SerializedProperty 编辑器运用进阶 拓展上一篇关于Unity 序列化 编辑器运用 上一篇是单独使用 一个类对象,下面将 List 运用到 序列化中,将如 public List<Npc> npcList new List<Npc>(); 显示在 In…...
小皮搭建本地网站/seo搜索优化 指数
vue.js react是仅仅几年前,我们通过小心谨慎地将每个标签可爱地放置在文件中来构建我们的网站吗? 手工制作网站的时代已经过去。 大多数现代网站都是精心制作的程序,它们会不断地对多个数据源执行ping操作,然后搅乱嵌套在其他标签…...
郑州网站建设多少钱/自动app优化
当前AI绘画的创造能力已经达到了令人惊叹的水平。通过深度学习和神经网络技术,AI绘画已经可以创造出高度逼真的图像和艺术作品,甚至可以模仿著名艺术家的风格和技巧。 目前,AI生成的艺术品正悄悄开始重塑文化。过去几年里,机器学…...