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

leetcode算法之字符串

目录

  • 1.最长公共前缀
  • 2.最长回文子串
  • 3.二进制求和
  • 4.字符串相乘

1.最长公共前缀

最长公共前缀
在这里插入图片描述

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {//法一:两两比较string ret = strs[0];for(int i=1;i<strs.size();i++){ret = findCommon(ret,strs[i]);}return ret;}string findCommon(string& s1,string& s2){int i = 0;while(i<min(s1.size(),s2.size()) && s1[i]==s2[i]) i++;return s1.substr(0,i);}
};
class Solution {
public:string longestCommonPrefix(vector<string>& strs) {//法二:统一比较int n = strs[0].size();for(int i=0;i<n;i++){char tmp = strs[0][i];for(int j = 1;j<strs.size();j++){if(i == strs[j].size() || tmp != strs[j][i]){return strs[0].substr(0,i);}}}return strs[0];}
};

2.最长回文子串

最长回文子串
在这里插入图片描述

class Solution {
public:string longestPalindrome(string s) {//使用中心扩展算法求解int begin = 0,len = 0,n = s.size();for(int i=0;i<n;i++){//先做奇数长度的扩展int left = i,right = i;while(left>=0 && right<n && s[left] == s[right]){left--;right++;}if(right-left-1>len){begin = left+1;len = right-left-1;}//再做偶数长度的扩展left = i,right = i+1;while(left>=0&&right<n&& s[left] == s[right]){left--;right++;}if(right-left-1>len){begin = left+1;len = right - left-1;}}return s.substr(begin,len);}
};

3.二进制求和

二进制求和
在这里插入图片描述

class Solution {
public:string addBinary(string a, string b) {//模仿列竖式相加int t = 0;//表示进位int cur1 = a.size()-1;int cur2 = b.size()-1;string ret;while(cur1>=0 || cur2>=0 || t){if(cur1>=0) t+=a[cur1--]-'0';if(cur2>=0) t+=b[cur2--]-'0';ret += t%2+'0';t /=2;}reverse(ret.begin(),ret.end());return ret;}
};

4.字符串相乘

字符串相乘
在这里插入图片描述

class Solution {
public:string multiply(string num1, string num2) {//高精度乘法//使用无进位相乘再相加,最后再处理进位//1.准备工作int m = num1.size(),n = num2.size();reverse(num1.begin(),num1.end());reverse(num2.begin(),num2.end());vector<int> tmp(m+n-1);//2.无进位相乘再相加for(int i=0;i<n;i++){for(int j=0;j<m;j++){tmp[i+j] += (num2[i]-'0')*(num1[j]-'0');}}//3.处理进位int cur = 0,t = 0;string ret;while(cur<m+n-1 || t!=0){if(cur<m+n-1) t+=tmp[cur++];ret += t%10+'0';t /= 10;}//4.处理前导零while(ret.size()>1 && ret.back() == '0') ret.pop_back();//5.注意输出结果顺序reverse(ret.begin(),ret.end());return ret;}
};
http://www.lryc.cn/news/247534.html

相关文章:

  • mongodb查询数据库集合的基础命令
  • 基于FactoryBean、实例工厂、静态工厂创建Spring中的复杂对象
  • Android 如何让路由器或者其他AP设备获取到主机名
  • java三大集合类--List
  • 机器人向前冲
  • jq——实现弹幕滚动(往左滚动+往右滚动)——基础积累
  • 深度学习第2天:RNN循环神经网络
  • 深度学习之基于百度飞桨PaddleOCR图像字符检测识别系统
  • 九、LuaTable(表)
  • 每日一题(LeetCode)----链表--链表最大孪生和
  • 腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群
  • C++学习之路(十一)C++ 用Qt5实现一个工具箱(增加一个进制转换器功能)- 示例代码拆分讲解
  • C语言每日一题(40)栈实现队列
  • Vue.js 的生命周期
  • SeaTunnel引擎下的SQL Server CDC解决方案:构建高效数据管道
  • 【攻防世界-misc】Encode
  • visual c++ 2019 redistributable package
  • WPF中DataGrid解析
  • 在数据库中进行表内容的修改(MYSQL)
  • Android中的多进程
  • Apache2.4 AliasMatch导致301重定向问题?
  • 广州华锐视点:基于VR元宇宙技术开展法律法规常识在线教学,打破地域和时间限制
  • Maven——Maven使用基础
  • U4_2:图论之MST/Prim/Kruskal
  • springboot 注解@JsonInclude
  • Python 中文完整教程目录
  • C/C++---------------LeetCode第35. 搜索插入位置
  • 网络安全--基于Kali的网络扫描基础技术
  • C语言——求π的近似值
  • 如何使用ffmpeg转换图片格式