刷题训练之字符串

server/2024/9/22 8:46:04/

> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:熟练掌握字符串算法

> 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。

> 专栏选自:刷题训练营

> 望小伙伴们点赞👍收藏✨加关注哟💕💕 

🌟前言分析

最早博主续写了牛客网130道题,这块的刷题是让同学们快速进入C语言,而我们学习c++已经有一段时间了,知识储备已经足够了但缺少了实战,面对这块短板博主续写刷题训练,针对性学习,把相似的题目归类,系统的刷题,而我们刷题的官网可以参考:​​​​​​

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网

⭐知识讲解

基本思想:

  • 一般都是定义指针来遍历字符串
  • 利用容器
  • 采用模拟

🌙topic-->1

题目链接:1. 最长公共前缀 - 力扣(LeetCode)

 

题目分析:

编写一个函数来查找字符串数组中的最长公共前缀。

算法原理:

  • 解法一:两个比较

图解:

  • 解法二:统一比较

图解:

代码演示:

// 方法一:
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) {// 方法二:统一比较for(int i = 0; i < strs[0].size(); 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];}
};

🌙topic-->2

题目链接:2. - 力扣(LeetCode)

 

题目分析:

给你一个字符串 s,找到 s 中最长的回文子串(如果字符串向前和向后读都相同

算法原理:

图解:

代码演示:

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);}
};

🌙topic-->3

题目链接:3. - 力扣(LeetCode)

 

题目分析:

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

算法原理:

  • 解法:两个比较

图解:

代码演示:

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) {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;}
};

🌙topic-->4

题目链接:4. - 力扣(LeetCode)

 

题目分析:

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

算法原理:

  • 解法:两个比较

图解:

代码演示:

class Solution {
public:string multiply(string n1, string n2) {// 解法:⽆进位相乘后相加,然后处理进位int m = n1.size(), n = n2.size();reverse(n1.begin(), n1.end());reverse(n2.begin(), n2.end());vector<int> tmp(m + n - 1);// 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. 处理进位int cur = 0, t = 0;string ret;while (cur < m + n - 1 || t) {if (cur < m + n - 1)t += tmp[cur++];ret += t % 10 + '0';t /= 10;}// 3. 处理前导零while (ret.size() > 1 && ret.back() == '0')ret.pop_back();reverse(ret.begin(), ret.end());return ret;}
};

🌟结束语

       今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

​​​


http://www.ppmy.cn/server/120199.html

相关文章

ubuntu18.04升级到20.04

要将 Ubuntu 18.04 升级到 Ubuntu 20.04&#xff0c;你可以按照以下步骤进行操作。升级操作会涉及到系统的核心部分&#xff0c;建议在升级之前备份重要数据。 1. 备份数据 在进行系统升级之前&#xff0c;请确保备份重要的数据。可以使用 rsync、tar、或者系统备份工具来创建…

C++——模板初阶

目录 引言 泛型编程 函数模板 1.函数模板的基本用法 2.函数模板的原理 3.函数模板的实例化 3.1 隐式实例化 3.2 显式实例化 (1)先强制类型转换 (2)指定模板参数的实际类型 4.函数模板的匹配规则 类模板 1.类模板的基本用法 2.栈类模板的实现 3.类模板的实例化 …

在 macOS 上管理 Node版本

文章目录 1. 安装 nvm2. 验证 nvm 是否安装成功3. 使用 nvm 安装/切换 Node.js 版本4. 卸载 Node.js 版本 在 macOS 上管理 Node.js 版本&#xff0c;通常使用 nvm&#xff08;Node Version Manager&#xff09;是最便捷的方式。以下是安装和使用 nvm 来管理 Node.js 版本的步骤…

k8s下的网络通信与调度

目录 一、k8s网络通信 1、k8s通信整体架构 2、flannel网络插件 &#xff08;1&#xff09;flannel跨主机通信原理 &#xff08;2&#xff09;flannel支持的后端模式 3、calico网络插件 &#xff08;1&#xff09;简介 &#xff08;2&#xff09;网络架构 &#xff08;…

【C++】模拟实现list

在上篇中我们已经了解过的list各种接口的功能使用&#xff0c;接下来我们就试着模拟实现一下吧&#xff01; 注意&#xff1a;我们在此实现的和C标准库中实现的有所不同&#xff0c;其目的主要是帮助大家大概理解底层原理。list的底层结构是带头双向循环链表&#xff0c;是链表…

Spring Boot 注解拦截器实现审计日志功能

引言 在业务系统中&#xff0c;审计日志记录至关重要。系统需要记录用户的操作日志&#xff0c;特别是在用户操作数据库修改、查询、删除重要数据时&#xff0c;系统应追踪操作人的身份、操作的对象、操作的时间等关键数据。这不仅对运维、合规性有帮助&#xff0c;同时也能提…

Spring框架基础知识

Spring框架基础知识笔记 Spring中bean的生命周期&#xff0c;指Bean从创建、初始化、使用到销毁的整个过程。 Bean实例化->依赖注入->Aware接口的回调->BeanPostProcessor前置处理->初始化方法->BeanPostProcessor后置处理->Bean使用->Bean销毁 循环引用…

物理学基础精解【7】

文章目录 平面方程直角坐标及基本运算 参考文献 平面方程 直角坐标及基本运算 向量的四则运算 下面由文心一言自动生成 向量的四则运算主要包括加法、减法、数乘&#xff08;标量乘法&#xff09;和数量积&#xff08;点积或内积&#xff09;&#xff0c;但通常不直接称为“除…