算法讲解之字符串

前言:

本文主要讲解算法中和字符串结合的题目,跟字符串结合的算法题种类丰富,主要是跟别的算法结合,下面介绍几道比较经典的题目~

第一道:14. 最长公共前缀

题目描述:

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"

题目解析:

我们就以第一个字符串为基准值,然后以第一个字符串的每一个字符与剩下的全部字符串进行比较,直到不相等,break跳出循环即可,注意返回值我们可以用substr来返回,不用再新创建一个字符串存储。

原码:

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {for(int i = 0;i<strs[0].size();i++){char tmp = strs[0][i];//取一个基准值与剩下比较for(int j = 1;j<strs.size();j++){if(i == strs[j].size() || strs[j][i] != tmp)return strs[0].substr(0,i);//以基准字符串返回  }}return strs[0];}
};

第二题:

5. 最长回文子串

题目描述:

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

题目解析:

我们可以用回文字符串的特性来解决这道题,先确定一个中心坐标,然后分别向左右两边扩张,一直到左右指针的字符不一样就停止。这里的从中心向两边遍历的方法需要考虑两种情况——偶数和奇数。

同样,返回值也可以用substr进行原来字符串截取进行返回。

原码:

class Solution {
public:string longestPalindrome(string s) {//中心扩展算法int num = s.size();//判断特殊情况if(num == 1 || num == 0) return s;int index = 0;int max_len = 0;for(int i = 0;i<num;i++)//依次枚举所有中点{//奇数int left = i-1,right = i+1;while(left >= 0 && right < num){if(s[left] == s[right]){if(right-left+1 > max_len){max_len = right-left+1;index = left;}left--;right++; }else break;}//偶数left = i;right = i+1;while(left >= 0 && right < num){if(s[left] == s[right]){if(right-left+1 > max_len){max_len = right-left+1;index = left;}left--;right++;}else break;}}if(max_len == 0) return s.substr(0,1);return s.substr(index,max_len);}
};

第三题:67. 二进制求和

题目描述:

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = "11", b = "1"
输出:"100"

示例 2:

输入:a = "1010", b = "1011"
输出:"10101"

题目解析:

这题就是标准的高精度算法,本质就是一道模拟题,对小学学过的列竖式运算的模拟

这题要熟练使用如何将字符转换为数字(- '0'),将数字转换为字符(+'0')。

注意reverse逆置函数是C++中已经实现的函数,与swap函数一样。

原码:

class Solution {
public:string addBinary(string a, string b) { int num1 = a.size();int num2 = b.size();string s;int index = 0;//记录下标int bit = 0;//记录进位for(int i = num1-1,j = num2-1;i > -1 || j > -1 || bit;i--,j--)//注意循环判断条件{int tmp = 0; if(i > -1) tmp += a[i]-'0';if(j > -1) tmp += b[j]-'0';tmp += bit;s += tmp%2 + '0';//再将数字转换为字符bit = tmp/2;}reverse(s.begin(),s.end());return s;}
};

第四题:43. 字符串相乘

题目描述:

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

题目解析:

本题也是一道模拟题,对乘法列竖式运算的模拟,但是如果只是普通的乘法列竖式,未免模拟过于繁琐,因此我们还要了解一种非进位相乘~

这种非进位相乘模拟起来更加简单。无进位相乘然后相加,,最后处理进位。

原码:

class Solution {
public:string multiply(string num1, string num2) {if(num1 == "0" || num2 == "0") return "0";int len1 = num1.size(),len2 = num2.size();vector<int> arr;arr.resize(len1+len2); reverse(num1.begin(),num1.end());reverse(num2.begin(),num2.end());//存储没有进位的答案for(int i = 0;i<len1;i++){int a = num1[i]-'0';for(int j = 0;j<len2;j++){int b = num2[j]-'0';arr[i+j] += a*b;//创建数组记录每一位无进位相乘}}//处理进位string ans;int bit = 0;for(int i = 0;i<len1+len2;i++){arr[i] += bit;ans += arr[i] % 10 + '0';bit = arr[i]/10;}reverse(ans.begin(),ans.end());//处理前导0if(ans[0] == '0'){ans.erase(0,1);}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

987. 二叉树的垂序遍历 - 力扣(LeetCode)

题目描述 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言&#xff0c;其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到…

生活篇——华为手机去除负一屏

华为手机去除如下图的恶心负一屏 打开华为的应用市场app 进入&#xff1a;我的-设置-国家/地区&#xff08;改为俄罗斯&#xff09;-进入智慧助手检查更新并更新智慧助手。 然后重复开始的操作&#xff0c;将地区改回中国&#xff0c;这样就没有负一屏了。

初中生用什么台灯最好?精选高口碑的学生护眼台灯

其实现在的孩子从上初中开始&#xff0c;他们的学习压力就已经很大了&#xff0c;繁重的功课让他们经常用眼过度&#xff0c;导致早早就戴上小眼镜。所以要想孩子拥有一个良好的视力健康&#xff0c;不仅要从日常的坐姿、用眼习惯开始纠正、培养&#xff0c;夜晚学习时的那一盏…

状态监测防火墙详细工作流程

状态监测防火墙是一种用于监测和分析网络通信状态的安全设备。其工作流程通常包括以下几个步骤&#xff1a; 1. 采集数据&#xff1a;防火墙会采集来自网络流量的数据&#xff0c;包括 IP 地址、端口号、协议类型等信息&#xff0c;并将其存储在数据库中。 2. 分析数据&#xf…

CPython:表达式的求值顺序(evaluation order)

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 C中表达式的求值 C语言针对表达式的计算&#xff0c;设置了操作符的优先级和结合性这两个特性&#xff0c;优先级用于解析不同优先级的符号&#xff0c;结合性用于解析…

2024年,要特别注意这两个方位

家居风水对每个家庭都非常重要&#xff0c;可在无形中影响到人们的事业、财富以及健康运势。俗话说&#xff1a;“风水轮流转”&#xff0c;2024年为甲辰龙年&#xff0c;斗转星移、九宫飞星将改变宫位&#xff0c;新一年的磁场即将启动&#xff0c;方位的吉凶也会重新变动&…

oracle单机打DBBP补丁

书接上回 ORA-600 adg无法查询故障-CSDN博客 https://blog.csdn.net/q195136130/article/details/135445378?spm1001.2014.3001.5502 单机安装DBBP 解压缩补丁包 unzip p34204559_121020_Linux-x86-64.zip 关闭数据库 su - oraclesqlplus / as sysdbashut immediate 检查…

Mac上软件闪退(意外退出)的解决方法

mac苹果电脑上运行软件会意外退出&#xff0c;怎么办&#xff0c;可以试试下面的方法&#xff0c;亲测可行&#xff01; 第一种方法&#xff1a; 1、打开访达&#xff0c;进入应用程序目录&#xff0c;找到闪退的软件图标&#xff0c;在软件图标上右键选择“显示简介”&#…

OpenCV 人脸检测(易上手版)

在丰富多彩的计算机视觉世界中&#xff0c;人脸检测是最有趣和最广泛应用的领域之一。无论是在安全系统、用户界面控制&#xff0c;还是在社交媒体中应用过滤器&#xff0c;准确有效地检测人脸的能力都是至关重要的。今天&#xff0c;很高兴与大家分享如何在 Python 中使用 Ope…

【网络攻防实验】【北京航空航天大学】【实验三、口令破解(Password Cracking)实验】

实验三、口令破解(Password Cracking)实验 一、 L0phtCrack破解实验 1、 注册L0phtCrack: 2、 设置口令: (1) 创建3个新账户: 帐户创建过程(以test-1为例): 帐户创建结果: (2) 使用L0phtCrack破解口令:(使用管理员账号运行程序) 口令破解结果: 正确破解口令…

探讨深度学习

深度学习 深度学习概述进展崛起框架 主页传送门&#xff1a;&#x1f4c0; 传送 深度学习 概述 深度学习是机器学习领域的一个分支&#xff0c;它是一种基于人工神经网络的学习方法&#xff0c;旨在让 计算机模仿人类大脑的神经结构和学习方式&#xff0c;从大量数据中学习并…

代码随想录算法训练营Day25|回溯算法·组合总和III,电话号码的字母组合

组合总和III 题目&#xff1a;找出所有相加之和为n的k个数的组合。组合中只允许含有1-9的正整数&#xff0c;并且每种组合中不存在重复的数字。 组合变量个数为k个&#xff0c;和为n。简单思路是使用k重循环&#xff0c;一层层找出来&#xff0c;然后把每一层的数相加&#x…

操作系统——1.1 操作系统的基本概念1.2 操作系统发展历程

参考课程是王道上传到b站的操作系统&#xff0c;主讲老师是咸鱼&#xff0c;相关的截图都是课程内的&#xff0c;阅读前建议大家支持王道的正版课程。 第一章 计算机系统概述 1.1 操作系统的基本概念&1.2 操作系统发展历程 一、概念 操作系统的概念 操作系统的功能和目…

学习总结11

KMP算法 全称Knuth-Morris-Pratt算法&#xff0c;是一种字符串匹配算法。该算法的目的是在一个文本串S内查找一个模式串P的出现位置。 KMP算法的核心思想是利用模式串自身的特性来避免不必要的字符比较。算法通过构建一个部分匹配表&#xff08;也称为next数组&#xff09;&a…

概率在AI中的应用

更多AI技术入门知识与工具使用请看下面链接&#xff1a; https://student-api.iyincaishijiao.com/t/iNSVmUE8/

VUE学习——表单的输入绑定

使用【v-model】。 输入框 <template><h1>表单输入绑定</h1><input type"text" v-model"message"><p>输入的值&#xff1a;{{ message }}</p> </template> <script>export default{data(){return{messa…

快速的搭建一个临时的 Linux 系统instantbox

centos 安装 docker-CSDN博客 首先要有docker && docker-compose mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) docker-compose up -d instantbox: instantbox 可以让你快速的搭…

黑马程序员——移动Web——day01

目录&#xff1a; 平面转换 简介平移定位居中案例-双开门旋转转换原点案例-时钟多重转换缩放案例-播放特效倾斜渐变 线性渐变案例-产品展示径向渐变综合案例 导航-频道渐变按钮轮播图猜你喜欢 1.平面转换 简介 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配…

GEE重投影——NICFI数据集重投影到WGS84坐标

简介 重投影 遥感影像的重投影是将一幅影像从一个地理坐标系统转换到另一个地理坐标系统的过程。在遥感应用中,重投影非常重要,因为不同的遥感影像可能来自于不同的遥感传感器或不同的地理坐标系统,而在进行数据分析和集成时,需要保证所有影像在同一地理坐标系统下。 重…