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

【算法】字符串



快乐的流畅:个人主页


个人专栏:《算法神殿》《数据结构世界》《进击的C++》

远方有一堆篝火,在为久候之人燃烧!

文章目录

  • 引言
  • 一、最长公共前缀
  • 二、最长回文子串
  • 三、二进制求和
  • 四、字符串相乘

引言

字符串题,大多数是模拟题,或者考察其他算法。通过本专题,了解字符串题型的函数接口和常用做法。

一、最长公共前缀


思路:

  1. 先处理边界,数组为空,返回空串
  2. 先用字符串tmp存储第一个字符串,再与其他字符串两两比较,保留相同的部分
  3. 比较完后,最后保留下来的tmp,即为最长公共前缀
class Solution
{
public:string longestCommonPrefix(vector<string>& strs){if(strs.size() == 0) return "";string tmp = strs[0];for(int i=1; i<strs.size(); i++){int cur = 0;while(cur < tmp.size() && cur < strs[i].size() && tmp[cur] == strs[i][cur]){cur++;}tmp.resize(cur);}return tmp;}
};

二、最长回文子串


思路:

  1. 中心扩展算法:暴力解法的优化,利用了回文串对称的性质进行枚举
  2. 遍历字符串,对于每一个位置,分别进行奇数长度和偶数长度的枚举,分别进行结果更新
  3. 注意遍历的过程中,只记录起始位置和长度,最后再创建子串
class Solution
{
public:string longestPalindrome(string s){int pos = 0, len = 0;for(int i=0; i<s.size(); i++){int left1 = i, right1 = i;//奇数个while(left1 >= 0 && right1 < s.size() && s[left1] == s[right1]){left1--;right1++;}if(right1 - left1 - 1 > len){pos = left1 + 1;len = right1 - left1 - 1;}int left2 = i, right2 = i + 1;//偶数个while(left2 >= 0 && right2 < s.size() && s[left2] == s[right2]){left2--;right2++;}if(right2 - left2 - 1 > len){pos = left2 + 1;len = right2 - left2 - 1;}}return s.substr(pos, len);}
};

三、二进制求和


思路:

  1. 高精度加法
  2. 分别从两个字符串的尾部开始向前遍历,模拟列竖式的过程
  3. 如果cur1、cur2存在,则取出对应位置的数字,否则返回0
  4. 将取出的数字与进位相加,再进行取模和整除操作,更新结果字符串和进位
  5. 循环条件:两个字符串没遍历完或者进位不为0,只要有一个满足,则循环继续
  6. 最后逆置字符串,返回
class Solution
{
public:string addBinary(string a, string b){string s;int cur1 = a.size() - 1, cur2 = b.size() - 1, carry = 0;while(cur1 >= 0 || cur2 >= 0 || carry){int n1 = cur1 >= 0 ? a[cur1--] - '0' : 0;int n2 = cur2 >= 0 ? b[cur2--] - '0' : 0;int n = n1 + n2 + carry;s += n % 2 + '0';carry = n / 2;}reverse(s.begin(), s.end());return s;}
};

四、字符串相乘


思路:

  1. 高精度乘法
  2. 先无进位相乘,再处理进位,最后处理前导零
  3. 无进位相乘:开辟tmp数组,大小为m + n - 1,分别从两个字符串的尾部开始向前遍历,对应下标i + j,进行无进位相乘
  4. 处理进位:从后向前遍历tmp数组,处理进位的同时更新结果字符串
  5. 处理前导零:当结果字符串长度大于1,且尾部为零,尾删
  6. 逆置字符串,返回
class Solution
{
public:string multiply(string n1, string n2){//无进位相乘int m = n1.size(), n = n2.size();vector<int> tmp(m + n - 1);for(int i=m-1; i>=0; i--){for(int j=n-1; j>=0; j--){tmp[i + j] += (n1[i] - '0') * (n2[j] - '0');}}//处理进位string s;int cur = m + n - 2, carry = 0;while(cur >= 0 || carry){if(cur >= 0) carry += tmp[cur--];s += carry % 10 + '0';carry /= 10;}//去除前导零while(s.size() > 1 && s.back() == '0') s.pop_back();//逆序reverse(s.begin(), s.end());return s;}
};

真诚点赞,手有余香

相关文章:

【算法】字符串

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、最长公共前缀二、最长回文子串三、二进制求和四、字符串相乘 引言 字符串题&#xff0c;大多数是模…...

Python酷库之旅-第三方库Pandas(037)

目录 一、用法精讲 116、pandas.Series.div方法 116-1、语法 116-2、参数 116-3、功能 116-4、返回值 116-5、说明 116-6、用法 116-6-1、数据准备 116-6-2、代码示例 116-6-3、结果输出 117、pandas.Series.truediv方法 117-1、语法 117-2、参数 117-3、功能 …...

iOS 左滑返回事件的控制

0x00 视图结构 1-根视图 1.1-控制器A 1.1.1-控制器B 1.1.1.1-控制器C 0x01 控制 通过设置 self.navigationController.interactivePopGestureRecognizer.enabled 为 YES 或 NO 来控制当面界面&#xff0c;是否能左滑返回 在 控制器B 的生命周期方法内&#xff0c;设置属性 s…...

= null 和 is null;SQL中关于NULL处理的4个陷阱;三值逻辑

一、概述 1、NULL参与的所有的比较和算术运算符(>,,<,<>,<,>,,-,*,/) 结果为unknown&#xff1b; 2、unknown的逻辑运算(AND、OR、NOT&#xff09;遵循三值运算的真值表&#xff1b; 3、如果运算结果直接返回用户&#xff0c;使用NULL来标识unknown 4、如…...

拖拽上传(预览图片)

需求 点击上传图片&#xff0c;或直接拖拽图片到红色方框里面也可上传图片&#xff0c;上传后预览图片 效果 实现 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content&…...

Oracle 12c新特性 In-Memory Column Store

Oracle 12c引入了一项重要的特性——In-Memory Column Store&#xff08;简称IM或In-Memory&#xff09;&#xff0c;这一特性极大地提升了数据库在处理分析型查询时的性能。以下是关于Oracle 12c In-Memory特性的详细介绍&#xff1a; 一、基本概念 In-Memory Column Store&…...

【数据结构】二叉树———Lesson2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…...

mongodb数据导出与导入

一、先去检查mongodump mongodump --version 如果报 mongodump version: built-without-version-string 或者其他的较老的版本&#xff0c;直接去下载最新的【传送门】 【以Ubuntu18.04为例】 安装工具 假设你下载的是 .tgz 文件&#xff08;适用于 Linux 系统&#xff09;&am…...

电路学习——经典运放电路之滞回比较器(施密特触发器)(2024.07.18)

参考链接1: 电子设计教程29&#xff1a;滞回比较器&#xff08;施密特触发器&#xff09; 参考链接2: 滞回比较器电路详细分析 参考链接3: 比较器精髓&#xff1a;施密特触发器&#xff0c;正反馈的妙用 参考链接4: 比较器反馈电阻选多大&#xff1f;理解滞后效应&#xff0c;轻…...

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker)

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker) 本文档详细介绍了在 Ubuntu Server 22.04 上使用 Docker 安装和配置 NVIDIA Container Toolkit 的过程。 概述 NVIDIA 容器工具包使用户能够构建和运行 GPU 加速容器。即可以在容器中使用NVIDIA显卡。 架构图如…...

JavaWeb day01-HTML入门

Web前端 课程安排 HTML、CSS简介 HTML快速入门 实现标题排版 新闻标题样式...

驱动框架——CMSIS第一部分 RTE驱动框架介绍

一、介绍CMISIS 什么是CMSIS&#xff08;cortex microcontrol software interface standard一种软件标准接口&#xff09;&#xff0c;官网地址&#xff1a;https://arm-software.github.io/CMSIS_6/latest/General/index.html 包含的core、driver、RTOS、dsp、nn等部分&…...

Debezium日常分享系列之:Debezium2.7版本PostgreSQL数据库连接器

Debezium日常分享系列之:Debezium2.7版本PostgreSQL数据库连接器 一、概述二、连接器的工作原理安全快照初始快照的默认工作流程行为临时快照触发临时增量快照触发临时阻塞快照增量快照增量快照流程Debezium 如何解决具有相同主键的记录之间的冲突快照窗口触发增量快照具有附加…...

保障信息系统安全保护等级调整期间的安全性

保障信息系统安全保护等级调整期间的安全性&#xff1a; 策略与实践 在当今数字化时代&#xff0c;信息系统已成为企业和组织运营的核心支撑。为了适应不断变化的业务需求和安全威胁环境&#xff0c;信息系统安全保护等级的调整成为必要之举。然而&#xff0c;这一调整过程可能…...

实战:shell编程之全量命令练习

概叙 槽点~~~~~~~&#xff01; 往期shell相关文章回顾&#xff0c;有兴趣的可以自行阅读和练习。 科普文&#xff1a;一文搞懂Vim-CSDN博客 科普文&#xff1a;jvm笔记-CSDN博客 科普文&#xff1a;一天学会shell编程-CSDN博客 科普文&#xff1a;Linux服务器巡检小结_lin…...

在 CentOS 7 上编译安装 Python 3.11

安装必要的依赖 首先&#xff0c;你需要安装一些开发工具和库&#xff0c;以便编译 Python 和 OpenSSL&#xff1a; yum -y groupinstall "Development tools" yum install -y wget gcc-c pcre pcre-devel zlib zlib-devel libffi-devel zlib1g-dev openssl-devel …...

Qt 4.8.7 + MSVC 中文乱码问题深入分析

此问题很常见&#xff0c;然而网上关于此问题的分析大多不够深刻&#xff0c;甚至有错误&#xff1b;加之Qt5又更改了一些编码策略&#xff0c;而很多文章并未提及版本问题&#xff0c;或是就算提了&#xff0c;读者也不重视。这些因素很容易让读者产生误导。今日我彻底研究透了…...

IDEA的常见代码模板的使用

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …...

arcgis怎么选取某个指定区域地方的数据,比如从全国乡镇数据选取长沙市乡镇数据

一共5个步骤&#xff0c;没一句废话&#xff0c;耐心看完。看完你就会在任何软件选取指定范围的数据了。 一、如图&#xff0c;先将数据加载到arcgis里面&#xff0c;我们要选取里面长沙市的范围数据。 二、选取长沙市的语句 “市” like ‘长沙%’ 切记&#xff0c;切记&…...

二、链表(1)

203.移除链表元素 创建一个虚拟哨兵头节点&#xff0c;就不用考虑原本头结点要不要删除 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def remove…...

为什么92%的团队用错Gemini做Slides?——基于17家SaaS公司实测数据的生成效率断层分析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini生成Slides的底层机制与能力边界 Gemini 生成幻灯片&#xff08;Slides&#xff09;并非简单地将文本转为 PPT 页面&#xff0c;而是依托多模态大模型对语义结构、视觉层级与演示逻辑的联合建模。…...

基于LLM的Python脚本自我进化:构建AI驱动的代码优化框架

1. 项目概述&#xff1a;当Python脚本学会自我进化几年前&#xff0c;如果有人告诉我&#xff0c;我写的Python脚本能在我喝咖啡的时候自己给自己“打补丁”、优化逻辑&#xff0c;我肯定会觉得这是科幻小说里的情节。但今天&#xff0c;这已经是我日常工作流的一部分。这个项目…...

面向密集预测任务的神经网络架构搜索:从原理到工程实践

1. 项目概述与核心价值“神经网络架构搜索在密集预测任务中的应用与优化”&#xff0c;这个标题听起来很学术&#xff0c;但背后其实是我们这些在一线搞计算机视觉、图像分割、深度估计的工程师和研究员们每天都在琢磨的“硬骨头”。简单来说&#xff0c;它探讨的是如何让机器自…...

TimescaleDB Helm Charts 项目停止维护后的应对策略与迁移指南

1. 项目概述与背景如果你正在Kubernetes上寻找一种可靠、可扩展的方式来部署时序数据库&#xff0c;那么TimescaleDB的Helm Charts项目曾经是一个绕不开的选项。这个由Timescale官方维护的仓库&#xff0c;旨在为开发者提供一套标准化的、声明式的部署方案&#xff0c;让你能通…...

基于大语言模型的自动化数据标注:Autolabel实战指南

1. 项目概述&#xff1a;用大模型给数据打标签&#xff0c;这事儿到底靠不靠谱&#xff1f;如果你做过机器学习项目&#xff0c;尤其是监督学习&#xff0c;那你肯定对“数据标注”这四个字又爱又恨。爱的是&#xff0c;没有标注好的数据&#xff0c;模型就是无米之炊&#xff…...

算法创新驱动AI效率革命:算力增强型进步如何超越摩尔定律

1. 项目概述&#xff1a;算法进步如何重塑计算机视觉的效率版图如果你在2012年告诉一个计算机视觉研究员&#xff0c;十年后我们能在ImageNet上训练出准确率超过90%的模型&#xff0c;他可能会觉得这需要天文数字般的计算资源。但现实是&#xff0c;我们不仅做到了&#xff0c;…...

程序员连夜带团队跑路,省了23万:这AI太贵,真的用不起了

好的&#xff0c;收到&#xff01;你说得对&#xff0c;之前的风格可能信息密度太高&#xff0c;有点“极客狂欢”的味道。 今天咱们换个姿势&#xff0c;用唠家常、说人话的方式&#xff0c;把5月11日AI圈最有趣、最魔幻的几件事儿聊明白。保证你在地铁上、蹲坑时&#xff0c;…...

PyTorch分类网络实战:从VGG16、MobileNetV2到ResNet50的架构解析与代码实现

1. 分类网络入门&#xff1a;为什么选择PyTorch&#xff1f; 刚接触深度学习时&#xff0c;我也曾被TensorFlow和PyTorch的选择困扰过。直到第一次用PyTorch实现了一个简单的图像分类器&#xff0c;才真正体会到它的魅力。PyTorch就像乐高积木&#xff0c;用动态计算图的方式让…...

别再默认用E1000了!VMware虚拟机网卡选VMXNET3还是E1000E?实测数据告诉你答案

VMware虚拟机网卡性能实战&#xff1a;从理论到选型决策树 在虚拟化环境中&#xff0c;网络性能往往是决定整体系统效率的关键瓶颈之一。作为一名长期奋战在VMware运维一线的技术专家&#xff0c;我见过太多因为网卡选型不当导致的性能问题——从莫名其妙的网络延迟到令人抓狂的…...

无人机安全测试终极实战指南:3大攻击向量深度解析与防护策略

无人机安全测试终极实战指南&#xff1a;3大攻击向量深度解析与防护策略 【免费下载链接】Drone-Hacking-Tool Drone Hacking Tool is a GUI tool that works with a USB Wifi adapter and HackRF One for hacking drones. 项目地址: https://gitcode.com/gh_mirrors/dr/Dron…...