【优选算法】字符串

一、相关编程题

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.rhkb.cn/news/344487.html

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

相关文章

vscode+latex设置跳转快捷键

安装参考 https://blog.csdn.net/Hacker_MAI/article/details/130334821 设置默认recipe ctrl P 打开设置&#xff0c;搜索recipe 也可以点这里看看有哪些配置 2 设置跳转快捷键

【python报错】TypeError: dict.get() takes no keyword arguments

【Python报错】TypeError: dict.get() takes no keyword arguments 在Python中&#xff0c;字典&#xff08;dict&#xff09;是一种非常灵活的数据结构&#xff0c;用于存储键值对。dict.get()方法是用来从字典中获取与给定键&#xff08;key&#xff09;相关联的值&#xff0…

[MQTT]服务器EMQX搭建SSL/TLS连接过程(wss://)

&#x1f449;原文阅读 &#x1f4a1;章前提示 本文采用8084端口进行连接&#xff0c;是EMQX 默认提供了四个常用的监听器之一&#xff0c;如果需要添加其他类型的监听器&#xff0c;可参考官方文档&#x1f517;管理 | EMQX 文档。 本文使用自签名CA&#xff0c;需要提前在L…

【转】ES, 广告索引

思考&#xff1a; 1&#xff09;直接把别名切换到上一个版本索引 --解决问题 2&#xff09;广告层级索引如何解决&#xff1f; -routing、join 3&#xff09;查询的过程&#xff1a;query and fetch, 优化掉fetch 4&#xff09;segment合并策略 5&#xff09;全量写入时副…

17、matlab实现均值滤波、中值滤波、Butterworth滤波和线性相位FIR滤波

1、创建信号 1&#xff09;创建正余弦信号、噪声信号和混合信号 原始正余弦信号公式&#xff1a;Signal1 sin(2*pi*20* t) sin(2*pi*40* t) sin(2*pi*60* t) 高斯分布的白噪声&#xff1a;NoiseGauss [randn(1,2000)] 均匀分布的白噪声&#xff1a;[rand(1,2000)] 正余弦…

数据库管理-第198期 升级Oracle ACE Pro,新赛季继续努力(20240605)

数据库管理198期 2024-06-05 数据库管理-第198期 升级ACE Pro&#xff0c;新赛季继续努力&#xff08;20240605&#xff09;1 惊喜2 变化3 Oracle ACE总结 数据库管理-第198期 升级ACE Pro&#xff0c;新赛季继续努力&#xff08;20240605&#xff09; 作者&#xff1a;胖头鱼的…

【MySQL数据库】my.ini文件参数中文注释

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

【JavaScript】内置对象 - 字符串对象 ④ ( 根据索引位置返回字符串中的字符 | 代码示例 )

文章目录 一、根据索引位置返回字符串中的字符1、charAt 函数获取字符2、charCodeAt 函数获取字符 ASCII 码3、数组下标获取字符 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、根据索引位置返回…

React Hooks 封装可粘贴图片的输入框组件(wangeditor)

需求是需要一个文本框 但是可以支持右键或者ctrlv粘贴图片&#xff0c;原生js很麻烦&#xff0c;那不如用插件来实现吧~我这里用的wangeditor插件&#xff0c;初次写初次用&#xff0c;可能不太好&#xff0c;但目前是可以达到实现需求的一个效果啦&#xff01;后面再改进吧~ …

【NI国产替代】500 MSPS 采样率,14 bit 分辨率数据采集盒子

• 双高速高精度数据采集通道 • 支持内外精准触发采样模式 • 丰富的总线控制接口 • 抗干扰能力强 高速采集盒子是一款双通道&#xff0c;具有 500 MSPS 采样率&#xff0c;14 bit 分辨率的高速高精度数据采集设备&#xff0c;其模拟输入带宽为 200 MHz&#xff0c;…

278 基于Matlab GUI的中重频PD雷达仿真系统

基于Matlab GUI的中重频PD雷达仿真系统。具有26页文档报告。仿真雷达信号的发射、传播、散射、接收、滤波、信号处理、数据处理的全部物理过程&#xff0c;因此应当实现对雷达发射机、天线、接收机、回波信号处理、数据处理的建模与仿真。程序已调通&#xff0c;可直接运行。 2…

【启程Golang之旅】让文件操作变得简单

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

C++STL简介

一、STL介绍 STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 二、STL的版本 1、原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完…

二叉树的实现(初阶数据结构)

1.二叉树的概念及结构 1.1 概念 一棵二叉树是结点的一个有限集合&#xff0c;该集合&#xff1a; 1.或者为空 2.由一个根结点加上两棵别称为左子树和右子树的二叉树组成 从上图可以看出&#xff1a; 1.二叉树不存在度大于2的结点 2.二叉树的子树有左右之分&#xff0c;次序不能…

造假高手——faker

在测试写好的代码时通常需要用到一些测试数据&#xff0c;大量的真实数据有时候很难获取&#xff0c;如果手动制造测试数据又过于繁重无聊&#xff0c;显得不够优雅&#xff0c;今天我们介绍的faker这个轮子可以完美的解决这个问题。faker是一个用于生成各种类型假数据的库&…

C++STL初阶(3):string模拟实现的完善

1.流提取>>的优化&#xff08;利用缓存区的思想&#xff09; istream& operator>>(istream& is,string& str) {str.clear();char c;c is.get();while (c ! \0 && c ! \n) {str c;c is.get();}return is; } 在上文的对string的实践中&#…

Android Lottie 体积优化实践:从 6.4 MB 降到 530 KB

一、说明 产品提出需求&#xff1a;用户有 8 个等级&#xff0c;每个等级对应一个奖牌动画。 按照常用的实现方式&#xff1a; 设计提供 8 个 lottie 动画&#xff08;8 个 json 文件&#xff09;。研发将 json 文件打包进入 APK 中。根据不同等级播放指定的动画。 每一个 …

React + SpringBoot实现图片预览和视频在线播放,其中视频实现切片保存和分段播放

图片预览和视频在线播放 需求描述 实现播放视频的需求时&#xff0c;往往是前端直接加载一个mp4文件&#xff0c;这样做法在遇到视频文件较大时&#xff0c;容易造成卡顿&#xff0c;不能及时加载出来。我们可以将视频进行切片&#xff0c;然后分段加载。播放一点加载一点&am…

Nginx(openresty) 查看连接数和并发送

1 通过浏览器查看 #修改nginx配置文件 location /status {stub_status on;access_log off;allow 192.168.50.0/24;deny all;} #重新加载 sudo /usr/local/openresty/nginx/sbin/nginx -s reloadActive connections //当前 Nginx 当前处理的活动连接数。 server accepts handl…

【kubernetes】k8s集群中的ingress(对外服务)规则详解

目录 一、Ingress 简介 1.1service的作用 1.2外部访问方案 (四种&#xff09;&#x1f339;&#x1f339;&#x1f339; 部署externalIPs 1.3Ingress 是什么 二、Ingress 组成&#x1f339;&#x1f339;&#x1f339; 三、Ingress 工作原理&#x1f431;&#x1f…