【优选算法】字符串 {相关编程题解析}

一、相关编程题

1.1 最长公共前缀

题目链接

14. 最长公共前缀 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

在这里插入图片描述

编写代码

// 解法一:两两比较
class Solution {
public:string longestCommonPrefix(vector<string>& strs) {int k = strs[0].size(); //表示最长公共前缀的结束位置for(int i = 0; i < strs.size()-1; ++i){for(int j = 0; j < k; ++j){if(j==min(strs[i].size(), strs[i+1].size()) || strs[i][j] != strs[i+1][j]){k = j;break;}}}return string(strs[0], 0, k);}
};// 解法二:统一比较
class Solution {
public:string longestCommonPrefix(vector<string>& strs) {int k = 0;while(k < strs[0].size()){char ch = strs[0][k];for(int i = 1; i < strs.size(); ++i){if(k==strs[i].size() || strs[i][k]!=ch)return string(strs[0], 0, k);}   ++k;}return strs[0];}
};

1.2 最长回文子串

题目链接

5. 最长回文子串 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

在这里插入图片描述

编写代码

//中心扩展算法
class Solution {
public:string longestPalindrome(string s) {int maxlen = 0, maxi = 0, n = s.size();for(int i = 0; i < n; ++i) //依次枚举所有的中点{//奇数长度的扩展int j = i, k = i;for(; j>=0 && k<n; --j, ++k)if(s[j] != s[k]) break;if(maxlen < k-j-1){maxlen = k-j-1;maxi = j+1;}//偶数长度的扩展j = i; k = i+1;for(; j>=0 && k<n; --j, ++k)if(s[j] != s[k]) break;if(maxlen < k-j-1){maxlen = k-j-1;maxi = j+1;}}return s.substr(maxi, maxlen);}
};

1.3 二进制求和

题目链接

67. 二进制求和 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

  • 应该从低位到高位进行加法运算,将每一位的加法结果%2(进制数)就是这一位的结果,/2就是这一位的进位。
  • 要保证将两个运算量的每一位都遍历相加,并不再有进位,此时结束循环。
  • 要将最终的计算结果逆序才能得到正确的答案。

编写代码

class Solution {
public:string addBinary(string a, string b) {int i = a.size()-1, j = b.size()-1, t = 0;string ret;while(i>=0 || j>=0 || t>0){if(i>=0) t+=a[i--]-'0';if(j>=0) t+=b[j--]-'0';ret+=t%2+'0';t/=2;}reverse(ret.begin(), ret.end());return ret;}
};

1.4 字符串相乘

题目链接

43. 字符串相乘 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

在这里插入图片描述

编写代码

//解法一:模拟
class Solution {
public:string multiply(string num1, string num2) {//为了从低位到高位相乘,先将两字符串逆序reverse(num1.begin(), num1.end());reverse(num2.begin(), num2.end());string tmp, ret; //tmp存储每位相乘的结果,ret是最终结果//用num1的每一位与num2相乘,再将tmp结果相加到retfor(int i = 0; i < num1.size(); ++i) {tmp.clear();for(int k = 0; k < i; ++k) tmp+='0'; //高位相乘补'0'int mul = 0; //保存每位相乘的结果及进位for(int j = 0; j < num2.size(); ++j){mul += (num1[i]-'0')*(num2[j]-'0');tmp+=mul%10+'0';mul/=10;}while(mul>0){tmp+=mul%10+'0';mul/=10;}ret = StrSum(ret, tmp); }//处理前导'0'int i = ret.size()-1;while(i>0) //注意个位的'0'保留{if(ret[i] != '0') break;else --i;}ret.resize(i+1);//将结果翻转reverse(ret.begin(), ret.end());return ret;}//两逆序字符串相加,返回的结果也是逆序的(从低位到高位)string StrSum(const string& str1,const string& str2){int i = 0, j = 0, t = 0;string ret;while(i<str1.size() || j<str2.size() || t>0){if(i<str1.size()) t+=str1[i++]-'0';if(j<str2.size()) t+=str2[j++]-'0';ret += t%10+'0';t/=10;}return ret;}
};//解法二:无进位相乘再相加,最后处理进位
class Solution {
public:string multiply(string num1, string num2) {//为了从低位到高位相乘,先将两字符串逆序reverse(num1.begin(), num1.end());reverse(num2.begin(), num2.end());//无进位相乘然后相加int m = num1.size(), n = num2.size();vector<int> tmp(m+n-1, 0);for(int i = 0; i < m; ++i){for(int j = 0; j < n; ++j){tmp[i+j] += (num1[i]-'0')*(num2[j]-'0');}}//最后处理进位string ret;int t = 0, i = 0;while(i<tmp.size() || t>0){if(i<m+n-1) t+=tmp[i++];ret+=t%10+'0';t/=10;}//处理前导'0'while(ret.size()>1 && ret.back() == '0') ret.pop_back();reverse(ret.begin(), ret.end());return ret;}
};

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

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

相关文章

当边缘计算用在定位设备

什么是边缘计算&#xff1f; 边缘计算是个比较高大上的概念&#xff0c;在这里就不提众多官方与非官方的定义了&#xff0c;只说说自己的理解。 边缘计算就是在最靠近物理设备的使用现场&#xff0c;利用有限的硬件资源&#xff0c;完成设备层数据采集、协议转换、数据上传、…

推荐系统学习 二

双塔模型的结构 用户的特征&#xff0c;我们知道用户ID还能从用户填写的资料和用户行为中获取很多特征&#xff0c;包括离散特征和连续特征。所有这些特征不能直接输入神经网络&#xff0c;而是要先做一些处理&#xff0c;比如用embedding层把用户ID映射到一个向量 跟之前我们…

JVM学习-监控工具(三)

jconsole 从Java5开始&#xff0c;在JDK中自带的java监控和管理控制台用于对JVM中内存、线程、和类等的监控&#xff0c;是一个基本JMX(java management extendsions)的GUI性能监控工具 三种连接方式 Local&#xff1a;使用JConsole连接是一个正在本地系统运行的JVM&#xf…

mfc110u.dll丢失的解决方法,分享七个有效方法

mfc110u.dll是一个动态链接库文件&#xff0c;属于Microsoft Foundation Classes (MFC) 的一部分。它是Microsoft Visual Studio 2012编程环境中用于C应用程序开发的一个组件。 1.2 功能与作用 mfc110u.dll文件提供了一系列的预构建类和函数&#xff0c;这些类和函数使得开发…

一键式AI智能知识库-谈如何打造人性化的LLM RAG知识库的重要性

RAG系统简介 在现代的LLM RAG&#xff08;Retrieval-Augmented Generation&#xff09;系统中&#xff0c;数据流的设计至关重要。让我们通过一个具体的例子来详细描述一个标准RAG系统的数据流。 首先&#xff0c;用户可以通过多种应用入口访问系统&#xff0c;包括PC应用、微…

无人机、机器人10公里WiFi远距离图传模块,实时高清视频传输,飞睿CV5200模组方案,支持mesh自组网模块

在快速发展的物联网时代&#xff0c;远距离无线通信技术已成为连接各种智能设备的关键。无人机、安防监控、机器人等领域对数据传输的距离和速度要求越来越高。 公里级远距离WiFi模组方案可以通过多种技术和策略的结合来实现无人机和机器人之间的高效通信传输。 飞睿智能CV52…

如何看待时间序列与机器学习?

GPT-4o 时间序列与机器学习的关联在于&#xff0c;时间序列数据是一种重要的结构化数据形式&#xff0c;而机器学习则是一种强大的工具&#xff0c;用于从数据中提取有用的模式和信息。在很多实际应用中&#xff0c;时间序列与机器学习可以结合起来&#xff0c;发挥重要作用。…

npm install报ENOENT: no such file or directory, open问题

没有进行npm的初始化操作导致的 npm init -y 再 npm install npm install

Linux编程--网络层和

1.IP协议 1.1 协议头的格式 4位版本&#xff1a;指定IP协议的版本&#xff0c;IPV4就是4。 4位首部长度&#xff1a;*4 报头的长度 [0-60] 8位服务类型&#xff1a;3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量…

中电金信:从规划到落地,中电金信全程陪伴式服务助力泛金融数字化转型

在当前的全球经济和金融发展格局中&#xff0c;金融行业正经历着一场以数字化为核心的快速转型。中国银行业和保险业已经成功探索出一条数字化转型的路径&#xff0c;并积累了丰富的实践经验。然而&#xff0c;泛金融领域则仍处于数字化转型的初期阶段&#xff0c;其转型能力因…

GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践

当下是 Python 急剧发展的时代&#xff0c;越来越多的人开始学习和使用Pyhon&#xff0c;而大家也遇到了各种问题。这份手册清晰、细致地介绍了 Python 代码应该遵循的编程风格&#xff0c;并解释了背后的原理和机制。 入门 Python 语言相对简单&#xff0c;但写出优雅的代码并…

开源数据库同步工具DBSyncer-数据库的连接

开源数据库同步工具DBSyncer使用的是什么数据库呢&#xff1f; 查看连接信息&#xff0c;如下&#xff1a; 如上图可知&#xff0c;DBSyncer支持两种方式的数据库连接方式&#xff0c; #storage #数据存储类型:disk(默认)/mysql(推荐生产环境使用) #disk-磁盘:/data/config(驱…

『 Linux 』目录与软硬链接 (万字详解)

文章目录 如何理解目录目录项 目录中的权限问题根目录Dentry缓存文件的增删改查与文件系统关系软硬链接软链接硬链接 如何理解目录 目录是一个文件存在其对应独立的Inode; $ stat dirFile: ‘dir’Size: 4096 Blocks: 8 IO Block: 4096 directory Device: f…

杂谈k8s

其实看我之前的博客&#xff0c;k8s刚有点苗头的时候我就研究过&#xff0c;然后工作的时候间接接触 也自己玩过 但是用的不多就忘记了&#xff0c;正苦于不知道写什么&#xff0c;水一篇 简化容器应用程序的部署和管理 自动化部署、自动伸缩、负载均衡、存储管理、自我修复 支…

springboot日志文件不生产问题

当指定了日志文件logback-spring.xml&#xff0c;发现项目启动的时候&#xff0c;不生产日志 解决方案&#xff1a;在yml中指定本工程具体的日志文件 logging:config: classpath:logback-spring.xml如果还是不产生日志文件的话&#xff1a;指定磁盘上具体的目录即可&#xff…

STM32 HAL库开发——入门篇(3):OLED、LCD

源自正点原子视频教程&#xff1a; 【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式_哔哩哔哩_bilibili 一、OLED 二、内存保护&#xff08;MPU&#xff09;实验 2.1 内存保护单元 三、LCD 3.1 显示屏分类 3.2 LCD简介 3.3 LCD…

回归现实:无需复杂假设即可轻松评估过程能力的简单方法

Cpk 和 Ppk 等过程能力指标能够测量您的过程相对于客户规格要求的执行情况。我们先回顾一些能力分析基础知识&#xff0c;再深入了解另一个能力估计值 Cnpk&#xff0c;该估计值很可能在您的能力分析库中非常有用。 能力统计指标分析 能力统计指标使用单个数字&#xff0c;是一…

什么是最好的手机数据恢复软件?6 款手机数据恢复软件 [2024 年更新]

什么是最好的手机数据恢复软件&#xff1f;在这篇文章中&#xff0c;您将了解 6 款最好的免费手机数据恢复软件&#xff0c;并学习如何恢复数据的完整指南。 最好的手机数据恢复软件是什么&#xff1f; 手机数据恢复软件是恢复智能手机中丢失或删除的文件、消息、照片和其他宝…

运筹学_8.决策论

引言 决策论是根据信息和评价准则&#xff0c;用数量方法寻找或选取最优决策方案的科学&#xff0c;是运筹学的一个分支和决策分析的理论基础。在实际生活与生产中对同一个问题所面临的几种自然情况或状态&#xff0c;又有几种可选方案&#xff0c;就构成一个决策&#xff0c;…

GaN功率电子器件中体缺陷相关机制的建模仿真研究

在电力电子器件的外延生长和器件制备过程中&#xff0c;缺陷是不可避免的&#xff0c;大量的缺陷在一定程度上会牺牲器件的击穿电压、导通电阻等性能&#xff0c;同时影响器件的可靠性。近期&#xff0c;河北工业大学和广东工业大学联合开发了缺陷相关的仿真模型&#xff0c;深…