【算法基础篇】-字符串

字符串篇

  • 一、最长回文子串
  • 二、二进制求和
  • 三、字符串相乘
    • 今日分享这里

在这里插入图片描述

一、最长回文子串

最长回文子串
给你一个字符串 s,找到 s 中最长的 回文 子串。
在这里插入图片描述

讲解:

我们这里使用的是中心扩展方法,其实类似于暴力枚举,但是时间复杂度O(n*n)。算法的思路时固定一个位置,从中心开始,向两边扩展,如果最左边的值等于最右边时(满足回文串)。再左边向左走,右边向右走(前提不要越界)。
在求出长度即可和原来比较,返回值从begin到len。我们上面所说的是奇数扩展,偶数扩展让right等于left下一个位置

begin用来记录起始位置,len记录每次变化的长度。如果比原来大,就更新给len。

草图如下:
在这里插入图片描述

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

二、二进制求和

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

讲解:

先讲解下二进制怎么求和的,还是跟列竖式运算差不多。只不过这里是逢2进0,如果俩数相加等于2,直接变零,不等于2,那就直接模2即可(结果是多少就多少),t%2表示运算最终结果,t/2表示进到下一位。

我们这里直接使用俩个指针遍历俩字符串数组的末尾,不过最终返回结果要逆序。

在这里插入图片描述

class Solution {
public:
    string addBinary(string a, string b) {
        string ret;//存放新的数组

        int cur1=a.size()-1,cur2=b.size()-1;
        int 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;
    }
};

附录:

开始做这道题没懂t是怎么运用的,原来让t是遍历俩字符串数组。贯穿进去的。


三、字符串相乘

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


讲解:

这里讲解下思路;类似于模拟列竖式运算的方法,只不过这里模拟的时候,中间过程没有进位,最终结果统一进位。但是你会发现,这个方法结果算下来是对的。
然后在讲解下代码:首先反准下。分四部进行。我们给俩字符串都弄个下标(如下图绿色部分)。数组大体思路是 我们来定义个tmp数组来存放无进位相乘再相加的结果,存放进位结果的时候我们要注意:存放的位置应该放哪里?存放的位置应该是俩数相乘的下标(例如:3和5相乘时,放在数组下标1的位置.3对应下标0,5下标是1。再和3和4相乘的结果相加)。

在这里插入图片描述

处理完进位后,注意前导零。比如说。一个数和0相乘,结果只要一个0,但是会出现多个0,我们只需要保存一个0即可。当最终结果大于1且都是0时,保留一个字符0即可。最后还要反转回来。reverse下

在这里插入图片描述

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

        //第二步,无进位相乘再相加
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                tmp[i+j]+=(n1[i]-'0')*(n2[j]-'0');
            }
        }

        //处理进位
        int cur=0,t=0;
        string res;
        while(cur<m+n-1||t!=0)
        {
            if(cur<m+n-1)   t+=tmp[cur++];
            res+=t%10+'0';
            t/=10;
        }

        //处理前导0
        while(res.size()>1&&res.back()=='0')    res.pop_back();

        reverse(res.begin(),res.end());
        return res;

    }
};

今日分享这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/977661.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

清华大学DeepSeek文档下载,清华大学deepseek下载(完成版下载)

文章目录 前言一、清华大学DeepSeek使用手册下载二、清华大学DeepSeek使用手册思维导图 前言 这是一篇关于清华大学deepseek使用手册pdf的介绍性文章&#xff0c;主要介绍了DeepSeek的定义、功能、使用方法以及如何通过提示语设计优化AI性能。以下是对这些核心内容的简要概述&…

DeepSeek技术提升,Linux本地部署全攻略

文章目录 1.Ollama部署1.1 安装Ollama1.2 配置Ollama1.3 下载deepseek模型 2.安装MaxKB可视化页面2.1 下载镜像2.2 运行容器2.3 配置MaxKB 3.配置Chatbox AI可视化页面 1.Ollama部署 Ollama下载地址 根据自己需求选择版本下载 1.1 安装Ollama 下载安装脚本并执行 curl -fs…

QSNCTF-WEB做题记录(2)

[第一章 web入门]常见的搜集 来自 <天狩CTF竞赛平台> 1&#xff0c;首先就是对网站进行目录枚举爆破 dirsearch -u http://challenge.qsnctf.com:31616 -x 404,403 得到如下的目录&#xff0c;分别查看一下内容 /.DS_Store /inde…

网络空间安全(1)web应用程序的发展历程

前言 Web应用程序的发展历程是一部技术创新与社会变革交织的长卷&#xff0c;从简单的文档共享系统到如今复杂、交互式、数据驱动的平台&#xff0c;经历了多个重要阶段。 一、起源与初期发展&#xff08;1989-1995年&#xff09; Web的诞生&#xff1a; 1989年&#xff0c;欧洲…

pandas读取数据

pandas读取数据 导入需要的包 import pandas as pd import numpy as np import warnings import oswarnings.filterwarnings(ignore)读取纯文本文件 pd.read_csv 使用默认的标题行、逗号分隔符 import pandas as pd fpath "./datas/ml-latest-small/ratings.csv" 使…

SSL 证书是 SSL 协议实现安全通信的必要组成部分

SSL证书和SSL/TLS协议有着密切的关系&#xff0c;但它们本质上是不同的概念。下面是两者的区别和它们之间的关系的表格&#xff1a; 属性SSL/TLS 协议SSL证书英文全称SSL&#xff08;Secure Sockets Layer&#xff09;&#xff0c;TLS&#xff08;Transport Layer Security&am…

蓝桥杯单片机基础部分——1.5基础模块代码升级

前言 之前的蓝桥杯单片机基础部分——1、基础模块代码发现有的同学不太会使&#xff0c;这样的话就给他们都封装一下函数&#xff0c;额外封装一下蜂鸣器和继电器&#xff0c;这就全了&#xff0c;到时候的逻辑只要没问题就没啥事了 LED灯模块 现在&#xff0c;给这里封装一个…

PCB设计常用布局布线方法

PCB设计常用布局布线方法 **1.模块化布局&#xff0c;**先放大器件再放小器件。 立创在原理图框完后&#xff0c;在PCB快捷shiftp 2.布局对齐美观 3.重要信号线优先处理 分类再画 4.减少Stub布线&#xff1a;就是避免为连接的线段&#xff0c;防止产生“天线效应”&#xff…

基于C++“简单且有效”的“数据库连接池”

前言 数据库连接池在开发中应该是很常用的一个组件&#xff0c;他可以很好的节省连接数据库的时间开销&#xff1b;本文基使用C实现了一个简单的数据库连接池&#xff0c;代码量只有400行只有&#xff0c;但是压力测试效果很好&#xff1b;欢迎收藏 关注&#xff0c;本人将会…

LangChain大模型应用开发:LangGraph快速构建Agent工作流应用

介绍 大家好&#xff0c;博主又来给大家分享知识了。今天给大家分享的内容是使用LangChain进行大规模应用开发中的LangGraph快速构建Agent工作流应用。 通过对前几次对LangChain的技术分享。我们知道LangChain作为一个强大的工具集&#xff0c;为开发者们提供了丰富的资源和便…

基于 IMX6ULL 的环境监测自主调控系统

文章目录 前言一、项目介绍二、前台QT界面1. 界面设计2. 代码示例 三、后台硬件驱动四、JsonRPC 实现前后台分离1. 为什么要拆分&#xff1f;2. 如何拆分&#xff1f; 五、总结 前言 项目完整代码&#xff1a;基于 IMX6ULL 的环境监测自主调控系统完整代码 该项目的源代码适用…

洛谷:花神的数论题--数位dp

求乘积 const int N 1e2 10,T 20;LL n; LL a[N]; LL dp[N][N];//枚举的第i位,没有任何限制,已经填写了j个1的数的乘积 //表示在[pos 1, len]中已经填写了cnt个1&#xff0c;[1, pos]任意填写数&#xff0c;所有合法方案的乘积LL mo(LL x) {return (x % mod mod) % mod; }…

【Linux探索学习】第三十一弹——线程互斥与同步(下):深入理解确保线程安全的机制

线程互斥与同步&#xff08;上&#xff09;&#xff1a;【Linux探索学习】第三十弹——线程互斥与同步&#xff08;上&#xff09;&#xff1a;深入理解线程保证安全的机制-CSDN博客 Linux探索学习&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?…

UVM_CALLBACK 应用举例

UVM_CALLBACK是一种基于回调函数的设计模式&#xff0c;允许用户在特定事件发生时插入自定义的行为。UVM提供了uvm_callback类作为基类&#xff0c;用户可以通过继承该类来定义自己的回调行为。采用uvm_callback基类&#xff0c;用户可以在不更改原始代码的情况下轻松插入调试代…

优选算法大集合(待更新)

1.双指针 1.1.移动零 leetcode链接&#xff1a;283. 移动零 - 力扣&#xff08;LeetCode&#xff09;​​​​​​ 移动零的问题我们可以将它归类为数组划分的问题&#xff0c;我们将数组划分为非零部分和零部分。我们会使用到双指针的算法&#xff0c;在这里&#xff0c;我…

本地大模型编程实战(22)用langchain实现基于SQL数据构建问答系统(1)

使 LLM(大语言模型) 系统能够查询结构化数据与非结构化文本数据在性质上可能不同。后者通常生成可在向量数据库中搜索的文本&#xff0c;而结构化数据的方法通常是让 LLM 编写和执行 DSL&#xff08;例如 SQL&#xff09;中的查询。 我们将演练在使用基于 langchain 链 &#x…

在 Mac mini M2 上 MaxKb配置ollama,API域名无效的解决方案

环境说明 docker方案安装与使用的maxkb 本地ollama安装deekseek r1 解决方案 参考https://bbs.fit2cloud.com/t/topic/4165 mac m1用户&#xff0c;根据github的以下回复&#xff0c;成功绑定域名api 如果你想调用本地的ollama 中的大模型&#xff0c;域名试试&#xff1a;…

【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级

欢迎来到 CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a;优先级队列priority_queue的使用和模拟实现&#xff0c;巧妙利用仿函数解决优先级 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a; C | C语言 | 数据结构与算法 | Linux…

【NLP 23、预训练语言模型】

人类发明后悔&#xff0c;来证明拥有的珍贵 —— 25.1.15 Bert的优势&#xff1a;① 预训练思想 ② Transformer模型结构 一、传统方法 VS 预训练方式 Pre-train&#xff1a; ① 收集海量无标注文本数据 ② 进行模型预训练&#xff0c;并在任务模型中使用 Fine-tune&#xff1a…

阳光高考瑞数6vmp算法还原

URL aHR0cHM6Ly9nYW9rYW8uY2hzaS5jb20uY24v这个站平时没有防护的&#xff0c;只有在平时填报高峰期&#xff0c;才会出来防护&#xff0c;也是为了防护自动脚本吧瑞数就是典型的cookie反爬 O开头cookie 6开头6代vmp&#xff0c;P值是加密的cookie&#xff0c;只有带上0开头的…