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

优先算法——专题十一:字符串

最长公共前缀

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

两种方法:两两比较或者一起比较

class Solution {
public:
//两两比较,每次取出两个字符串的最长公共前缀作为基准和下一个进行比较,时间复杂度O(N*M)string longestCommonPrefix(vector<string>& strs) {string ans = strs[0];for(int i = 1; i < strs.size(); i++){int index = 0;while(index < ans.size() && index < strs[i].size()){if(ans[index] == strs[i][index])++index;elsebreak;}string tmp(ans.begin(), ans.begin() + index);ans = tmp;}return ans;}
};class Solution {
public:
所有字符串一起比较,当字符不同时,结束比较返回,时间复杂度也是O(M*N)string longestCommonPrefix(vector<string>& strs) {if(strs.size() == 0) return "" ;if(strs.size() == 1) return strs[0];int index = 0;int flag = 1;while(flag && index < strs[0].size()){char ch = strs[0][index];for(auto& str : strs){if(str == "")return "";if(index >= str.size()){flag = 0;break;}if(ch != str[index])flag = 0;}if(flag == 1)index++;}string ans(strs[0].begin(), strs[0].begin()+index);return ans;}
};

最长回文字符串

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

中心扩展算法

class Solution {
public:
//中心扩展算法
//遍历,每次从当前元素向左右扩展比较
//注意奇数和偶数长度回文串的不同,所以比较起点不同string longestPalindrome(string s) {int n = s.size();int len = 0, prev = 0, next = 0;int anslen = 0, ansprev= 0, ansnext = 0;for(int i = 0; i < n; i++){//奇数处理prev = i;next = i;while(prev >= 0 && next < n && s[prev] == s[next]){prev--;next++;}len = next - prev - 1;if(len > anslen){anslen = len;ansprev = prev;ansnext = next;}//偶数处理prev = i;next = i + 1;while(prev >= 0 && next < n && s[prev] == s[next]){prev--;next++;}len = next - prev - 1;if(len > anslen){anslen = len;ansprev = prev;ansnext = next;}}return s.substr(ansprev + 1, anslen);}
};

二进制求和

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

大数相加或者相乘等都需要将字符串分为一个一个的数值进行运算

class Solution {
public:string addBinary(string a, string b) {//先翻字符串reverse(a.begin(), a.end());reverse(b.begin(), b.end());int p1 = 0, p2 = 0, len1 = a.size(), len2 = b.size();int tmp = 0;string ans;while(p1 < len1 || p2 < len2){int num1 = p1 < len1 ? a[p1] - '0' : 0;int num2 = p2 < len2 ? b[p2] - '0' : 0;int sum = num1 + num2 + tmp;tmp = sum / 2;sum %= 2;ans += sum + '0';p1++;p2++;}if(tmp) ans += tmp + '0';reverse(ans.begin(), ans.end());return ans;}
};

字符串相乘

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

解法一:每位相乘之后求进位,相加结果

class Solution {
public:string multiply(string num1, string num2) {if(num1 == "0" || num2 == "0")return "0";int len1 = num1.size(), len2 = num2.size();reverse(num1.begin(), num1.end());reverse(num2.begin(), num2.end());string ans(len1 + len2, '0');for(int i = 0; i < len1; i++){//进行相乘string tmp(i, '0');int b = 0;//进位for(int j = 0; j < len2; j++){int a = (num1[i] - '0') * (num2[j] - '0') + b;b = a / 10;a %= 10;tmp += a + '0';}if(b)tmp += b + '0';b = 0;//将算出的字符串加到ans中int k = 0;for(k = 0; k < tmp.size(); k++){int a = ans[k] - '0' + tmp[k] - '0' + b;b = a / 10;a %= 10;ans[k] = a + '0';}for(k; k < ans.size() && b; k++){int a = ans[k] - '0' + b;b = a / 10;a %= 10;ans[k] = a + '0';}}while(ans.size() >= len1 + len2 && ans.back() == '0')ans.pop_back();reverse(ans.begin(), ans.end());return ans;}
};

解法二:每一步相乘之后放入数组下标位置,最后求进位

class Solution {
public:string multiply(string num1, string num2) {if(num1 == "0" || num2 == "0")return "0";int len1 = num1.size(), len2 = num2.size();reverse(num1.begin(), num1.end());reverse(num2.begin(), num2.end());vector<int> tmp(len1 + len2 - 1, 0);//无进位相乘for(int i = 0; i < len1; i++)for(int j = 0; j < len2; j++)tmp[i + j] += (num1[i] - '0') * (num2[j] - '0');//处理进位string ans;int b = 0;for(int i = 0; i < tmp.size(); i++){int a = tmp[i] + b;b = a / 10;a %= 10;ans += a + '0';}   if(b) ans += b + '0';reverse(ans.begin(), ans.end());return ans;}
};


文章转载自:

http://FQsCgDio.dnqgm.cn
http://ElcTkhBJ.dnqgm.cn
http://PH9Mvqg2.dnqgm.cn
http://KamtG7Li.dnqgm.cn
http://lvLUFzDX.dnqgm.cn
http://lWoPXhRS.dnqgm.cn
http://BSMSvGtU.dnqgm.cn
http://dK1gEsuD.dnqgm.cn
http://kmkyBxre.dnqgm.cn
http://A6t1Ld4S.dnqgm.cn
http://3o4t9l9p.dnqgm.cn
http://6Cn5HdzH.dnqgm.cn
http://0TPO1MXY.dnqgm.cn
http://8G5qchZa.dnqgm.cn
http://lV3hV61u.dnqgm.cn
http://0T434GET.dnqgm.cn
http://YuMOQ3mB.dnqgm.cn
http://Re0BNwtf.dnqgm.cn
http://KIpUyRR7.dnqgm.cn
http://emwqzBml.dnqgm.cn
http://lCDbrB99.dnqgm.cn
http://1GB4B3JI.dnqgm.cn
http://XMIBwS0d.dnqgm.cn
http://RhyJFlZr.dnqgm.cn
http://Lu752Znj.dnqgm.cn
http://kUzwwifw.dnqgm.cn
http://G0u6VhH2.dnqgm.cn
http://dsCWC3zn.dnqgm.cn
http://vfIjce2D.dnqgm.cn
http://IbXoKZsM.dnqgm.cn
http://www.dtcms.com/a/379410.html

相关文章:

  • [Spring Cloud][3]从零开始简单工程搭建实践详解,远程调用
  • 为什么要显示调用析构函数
  • MySQL 数据完整性与约束:从基础到实战,守护数据准确性
  • Python中的“占位符”艺术:深入理解pass关键字的妙用
  • 构建企业级Python离线包仓库:从下载到服务部署全流程指南
  • C++面向对象之多态
  • 个人自留笔记——git操作
  • 命令模式,餐厅订单管理系统C++
  • Android EDLA测试命令总结
  • opencv基础实践;银行卡号识别
  • 【录屏软件】 实用工具推荐——电脑录屏软件班迪(Bandicam)录屏图文安装指南
  • 微服务事务管理实践与 Seata 框架解析
  • 今日行情明日机会——20250911
  • P4105 [HEOI2014] 南园满地堆轻絮
  • Docker 命令核心语法、常用命令
  • Windows安装Chroma DB
  • 60_基于深度学习的羊群计数统计系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • Linux 命令 top、vmstat、iostat、free、iftop 正常用法和退出.
  • 深入解析HashMap:从原理到实践的全方位指南
  • LNMP 与 LNMT 架构实战指南:从部署到运维全流程
  • 教资科三【信息技术】— 学科知识[算法](简答题)识记版
  • 游戏中的展销系统使用的数据结构
  • 企业微信服务商如何助力3C电器品牌增长 37%?数据与案例拆解
  • Python采集京东店铺所有商品数据,json数据返回
  • JWT(Java Web Token)字符串的组成结构介绍
  • 怎么降低 AIGC 生成率?
  • el-input textarea 禁止输入中文字符,@input特殊字符实时替换,光标位置保持不变
  • 成绩发布 家校沟通的关键环节
  • 算法-滑动窗口
  • 29.线程的互斥与同步(三)