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

【算法专题十一】字符串

文章目录

  • 1. leetcode.14.最长公共前缀
    • 1.1 题目
    • 1.2 思路
    • 1.3 代码
  • 2. leetcode.5.最长回文字串
    • 2.1 题目
    • 2.2 思路
    • 2.3 代码
  • 3. leetcode.67.二进制求和
    • 3.1 题目
    • 3.2 思路
    • 3.3 代码
  • 4. leetcode.43.字符串相乘
    • 4.1 题目
    • 4.2 思路
    • 4.3 代码

1. leetcode.14.最长公共前缀

1.1 题目

题目链接
在这里插入图片描述

1.2 思路

在这里插入图片描述
在这里插入图片描述

1.3 代码

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {string ret = strs[0];for(int i = 0; i < strs.size(); i++){ret = HanShu(ret, strs[i]);}return ret;}string HanShu(string& s1, string& s2){int i = 0;while(i < min(s1.size(), s2.size()) && s1[i] == s2[i]){i++;}return s1.substr(0, i);}
};

2. leetcode.5.最长回文字串

2.1 题目

题目链接
在这里插入图片描述
在这里插入图片描述

2.2 思路

在这里插入图片描述
在这里插入图片描述

2.3 代码

class Solution {
public:string longestPalindrome(string s) {int begin = 0, len = 0;for(int i = 0; i < s.size(); i++){// 1. 先做奇数次遍历int left = i, right = i;while(left >= 0 && right < s.size() && s[left] == s[right]){left--;right++;if(right - left - 1 > len){begin = left + 1;len = right - left - 1;}}// 2. 再做偶数次遍历left = i, right = i + 1;while(left >= 0 && right < s.size() && s[left] == s[right]){left--;right++;if(right - left - 1 > len){begin = left + 1;len = right - left - 1;}}}return s.substr(begin, len);}
};

3. leetcode.67.二进制求和

3.1 题目

题目链接
在这里插入图片描述

3.2 思路

在这里插入图片描述
在这里插入图片描述

3.3 代码

class Solution {
public:string addBinary(string a, string b) {string ret;int cur1 = a.size() - 1, cur2 = b.size() - 1, t = 0;while(cur1 >= 0 || cur2 >= 0 || t > 0){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. leetcode.43.字符串相乘

4.1 题目

题目链接
在这里插入图片描述
在这里插入图片描述

4.2 思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 代码

class Solution {
public:string multiply(string n1, string n2) {// 1. 首先进行 不进位相乘int m = n1.size(), n = n2.size();reverse(n1.begin(), n1.end());reverse(n2.begin(), n2.end());vector<int> tmp(m + n - 1);for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){tmp[i + j] += (n1[i] - '0') * (n2[j] - '0');}}// 2. 处理进位string ret;int cur = 0, t = 0;while(cur < m + n - 1 || t != 0){if(cur < m + n - 1) t += tmp[cur++];ret += t % 10 + '0';t /= 10;}// 3. 处理前导0while(ret.size() > 1 && ret.back() == '0') ret.pop_back();reverse(ret.begin(), ret.end());return ret;}
};
http://www.xdnf.cn/news/4796.html

相关文章:

  • Java并发编程几个问题的解答
  • ResNet中使用expansion放大维度特征
  • ESP32 DAC音频应用示例与场景
  • Java 的 Monitor 机制:原理与源码详解
  • c语言与c++到底有什么区别?
  • Alpha3DCS公差分析系统_国产替代的3D精度管控方案-SNK施努卡
  • 力扣热题——到达最后一个房间的最少时间 I
  • 云原生应用全生命周期管理实战:从开发、部署到运维的一体化方案
  • 华为首款鸿蒙电脑正式亮相,开启国产操作系统新篇章
  • 20250508在WIN10下使用移远的4G模块EC200A-CN直接上网
  • 【整形数字转化为字符串,求有几位相同(汉明距离)】2021-11-20 20:15
  • EMQX 作为 MQTT Broker,支持 ​MQTT over TCP​ 和 ​MQTT over WebSocket​ 两种协议
  • 数据分析平台选型与最佳实践:如何打造高效、灵活的数据生态?
  • 编译原理头歌实验:词法分析程序设计与实现(C语言版)
  • 人工智能的自动驾驶新纪元:端到端智能系统挑战与前沿探索方案
  • Java 17配置Jenkins
  • robot_lab中rsl_rl的replay_amp_data.py简洁解析
  • 支持鸿蒙next的uts插件
  • 线代第二章矩阵第五、六、七节矩阵的转置、方阵的行列式、方阵的伴随矩阵
  • Android开发报错解决
  • mysql 复习
  • Webug4.0靶场通关笔记22- 第27关文件包含
  • 用递归实现各种排列
  • 使用Jmeter进行核心API压力测试
  • 如何进行APP安全加固
  • 计算机视觉与深度学习 | 基于Transformer的低照度图像增强技术
  • 用react实现一个简单的三页应用
  • nut-form表单:实现动态新增、校验
  • android ViewModel liveData无法监听之多线程下activityViewModels不安全
  • ISP gamma校正简介