C++每日一练:小艺照镜子(详解分治法)

文章目录

  • 前言
  • 一、题目
  • 二、解题
    • 1.分析
  • 总结


前言

大过节的,不想去看人后脑勺,就做点题来玩。挑了小艺照镜子,百分通过~
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目

题目名称:
小艺照镜子

题目描述:
已知字符串str。 输出字符串str中最长回文串的长度。

输入描述:
输入字符串s.(1<=len(str)<=10000)

示例:
输入
abab

输出
3

二、解题

1.分析

这题 初一看挺简单的,先取最大值 0 到 字符长度,然后不停的减小长度比较就行了,结果行不通。纠结好半天,改变思路,先假设最小的情况2或3个,再不停增大,一直到前后不相同。

分三个函数来解释:

函数一:用来测试aba的情况下的回文串

int test_odd(string &s, int m){
    int l = m-1, r = m+1, len = 1;
    while(l >=0  && r < (int)s.length()){
        if(s[l] == s[r]) l--, r++, len += 2;
        else break;
    }
    return len;
}

很简单的代码,m为中间的b,则l就是a,r也是a。初始就是1个回文,找到l和r相同,就加2个。如此从m为1到结束。就找出了所有奇数情况的回文串,并取得最大的一个。

函数二:用来测试baab的情况下的回文串

int test_even(string &s, int m){
    int l = m, r = m+1, len = 0;
    while(l>=0 && r<(int)s.length()){
        if(s[l] == s[r]) l--, r++, len += 2;
        else break;
    }
    return len;
}

这和上在的逻辑差不多,不过就是从s[0] 与s[1] 比较开始罢了,不用解释了吧~

函数三:综合循环一下就好了,就是solution部分。

完整代码:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

int test_odd(string &s, int m){
    int l = m-1, r = m+1, len = 1;
    while(l >=0  && r < (int)s.length()){
        if(s[l] == s[r]) l--, r++, len += 2;
        else break;
    }
    return len;
}

int test_even(string &s, int m){
    int l = m, r = m+1, len = 0;
    while(l>=0 && r<(int)s.length()){
        if(s[l] == s[r]) l--, r++, len += 2;
        else break;
    }
    return len;
}

int solution(std::string s){
    int result = 1;
    // TODO:
    int L = s.length(), res_odd = 0, res_even = 0;
    if (L>=2){
        for (int i=1; i<L; ++i){
            if(s[i-1] == s[i+1]){
                res_odd = max(res_odd, test_odd(s, i));
            };
        }

        for(int i=0; i<L; ++i){
            if (s[i] == s[i+1]){
                res_even = max(res_even, test_even(s, i));
            }
        }
    }
    result = max(result, max(res_odd, res_even));
    return result;
}


int main() {

    std::string s="abc";

    //getline(std::cin, s);;

    int result = solution(s);

    std::cout<<result<<std::endl;

    return 0;
}

看solution部分:因为至少一个字母的情况也能算是回文,所以就默认值为1。
先找出奇数情况下最长的回文,再找出偶数情况下的。
为了尽量减少循环,笔者在调用奇、偶查找之前,先设了一个条件:
奇数情况要求:if(s[i-1] == s[i+1])
偶数情况要求:if (s[i] == s[i+1])
也就是最少要存在回文大于1的情况才去查找是不是有更多的回文。
这样能极大的减少两个查找函数的调用,要不然怕是可能会超时。
最后result = max(result, max(res_odd, res_even));
找出最大值就完事!


总结

把一个较复杂的问题,分解成若干个较简单的问题,这应该也算是分治法了吧~ 分而治之嘛!

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

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

相关文章

【Linux】生产者消费者模型

目录 一、生产者消费者模型 1、生产者消费者模型的概念 2、生产者、消费者之间的关系 3、生产者和消费者的特点 二、基于BlockingQueue的生产者消费者模型&#xff08;条件变量控制同步与互斥&#xff09; 1、一个生产线程和一个消费线程完成的计算任务 1.1BlockQueue.h…

Kubernetes服务搭建[配置-部署](Kubeadm)

文章目录 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一&#xff1a;主节点操作 查看主机域名->编辑域名1.1 编辑HOST 从节点也做相应操作1.2 从节点操作 查看从节点102域名->编辑域名1.3 从节点操作 查看从节点103域名->编辑域名 二&#xff1a;安装自动填充&…

进程地址空间与页表方面知识点(缺页中断及写时拷贝部分原理)

谢谢阅读&#xff0c;如有错误请大佬留言&#xff01;&#xff01; 目录 谢谢阅读&#xff0c;如有错误请大佬留言&#xff01;&#xff01; 抛出总结 开始介绍 发现问题 进程地址空间&#xff08;虚拟地址&#xff09; 页表 物理内存与进程地址空间映射 缺页中断基本…

Spring--AOP详细介绍--和详细代码演示证明理解

目录 Spring--AOP详细介绍 基本介绍 代码演示—入门 需求说明 定义一个接口类Vehicle 定义一个实现接口类的Car类 定义一个实现接口类的Ship类 创建测试类Test.java 来思考一下&#xff0c; 解决方案-动态代理方式-2 修改 Car类 修改 Ship类 创建VehicleProxyProvid…

Stable Diffusion使用方法

SD的本地安装教程有很多我就不重复了&#xff0c;这里主要是记录我在使用SD Webui的过程中遇到的问题&#xff0c;总结的一些提升出图效率&#xff0c;出好图概率的经验。 先搞几张看看效果 二次元妹妹 高达 &#xff1f; Ok&#xff0c;以上只是一小部分成品 &#xff0c;属…

PyQt5桌面应用开发(6):文件对话框

本文目录 PyQt5桌面应用系列介绍QFileDialog的静态接口QFileDialog的对象接口 示例结论后记 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&#xff09;&#xff1a;事件循环 PyQt5桌面应用开发&#xff…

MRI k空间概念整理

以下内容为MRI期末复习笔记&#xff0c;仅供复习参考使用。 K空间概念 K空间为包含MR数据的阵列&#xff0c;也可定义为原始数据阵列相位编码轴和频率编码轴的交叉点 MR扫描得到的数据为谱空间数据&#xff0c;谱空间数据与空间数据位置无直接对应关系 k空间每一数据点或数据…

不能使用chatGPT?这3个平替甚至比chatGPT更强

不能使用chatGPT&#xff1f;这3个平替甚至比chatGPT更强 chatGPT&#xff0c;一款由OpenAI开发的新型AI聊天机器人&#xff0c;正在势如破竹地改变着许多人的工作和生活方式。作为一款基于大语言模型的聊天机器人&#xff0c;chatGPT能够理解自然语言并进行人机对话。与传统的…

用于scATAC-seq有监督分类的Cellcano

细胞类型识别是单细胞数据分析的基本步骤。由于高质量参考数据集的可用性&#xff0c;有监督细胞分类方法在scRNA-seq数据中很受欢迎。染色质可及性分析&#xff08;scATAC-seq&#xff09;的最新技术进步为理解表观遗传异质性带来了新的见解。随着scATAC-seq数据集的不断积累&…

html5地理位置信息介绍, 百度地图使用

文章目录 1. HTML5中地理信息API1.1 Geolocation 接口 2. 在vue中使用百度地图3. 在react中使用百度地图 1. HTML5中地理信息API HTML5 的地理位置 API 可以让你获取用户的地理位置信息&#xff0c;并将其用于许多不同的应用场景&#xff0c;例如&#xff1a; 在地图上显示用…

钴基双金属氧化物储能材料的高效制备和电化学应用

一、引言 钴金属氧化物作为一类典型的储能材料&#xff0c;既可以用于锂离子电池负极材料&#xff0c;又可以用于超级电容器电极材料&#xff0c;因而备受关注 。在作为锂离子电池负极材料时&#xff0c;具有较高的理论比容量&#xff0c;但充放电体积变化较大、材料导电性较差…

爬虫为什么需要ip

爬虫需要使用爬虫ip主要是为了解决以下问题&#xff1a; 1、反爬虫机制&#xff1a;许多网站会设置反爬虫机制来防止爬虫程序的访问&#xff0c;例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制&#xff0c;使得爬虫程序更难被检测到。 2、访问限制&a…

浅拷贝和深拷贝

浅拷贝&#xff1a; 定义&#xff1a;浅拷贝&#xff08;Shallow Copy&#xff09;是一种简单的对象复制方式&#xff0c;将一个对象的数据成员直接复制给另一个对象&#xff08;通常是通过默认的复制构造函数或赋值运算符实现&#xff09;&#xff0c;这些数据成员可以是基本…

JavaScript:字符串

文章目录 字符串344. 反转字符串reverse() 方法&#xff08;打基础的时候&#xff0c;不要太迷恋库函数&#xff09;代码及思路 541. 反转字符串 IIJavaScript String split() 方法JavaScript Array join() 方法代码分析见注释 剑指 Offer 05. 替换空格思路注意&#xff1a;上面…

网络基础学习:什么是网络与网络发展史

什么是网络与网络发展史 什么是网络&#xff1f;什么是网络发展史&#xff1f;分组交换技术TCP/IP技术Web技术ARPANET&#xff08;1969年&#xff09;Internet&#xff08;1983年&#xff09;万维网&#xff08;1990年&#xff09;移动互联网&#xff08;2007年&#xff09;物联…

KDGK-F断路器机械特性测试仪

一、产品概述 KDGK-F 断路器机械特性测试仪可用于各电压等级的真空、六氟化硫、少油、多油等电力系统高压开关的机械特性参数测试与测量。测量数据稳定&#xff0c;抗干扰性强&#xff0c;可在500KV等级及以下电站做实验&#xff0c;接线方便&#xff0c;操作简单&#xff0c;是…

第14章 项目采购管理

文章目录 采购管理包括如下几个过程14.2 编制采购计划 462编制采购计划的输出1&#xff09;采购管理计划2&#xff09;采购工作说明书3&#xff09;采购文件 14.2.3 工作说明书&#xff08;SOW&#xff09; 14.3 实施采购 47414.3.2 实施采购的方法和技术 476&#xff08;1&…

No.054<软考>《(高项)备考大全》【冲刺8】《软考之 119个工具 (6)》

《软考之 119个工具 &#xff08;6&#xff09;》 99.应急应对策略:100.风险在评估:101.风险审计:102.偏差和趋势分析:103.技术绩效测量:104.自制或外购分析:105.市场调研:106.投标人会议:107.建议书评价技术:108.独立核算:109.广告:110.采购谈判:111.合同变更控制系统:112.采购…

ArduPilot之GPS Glitch问题M8N模块配置

ArduPilot之GPS Glitch问题&M8N模块配置 1. 源由2. 现象3. 视频分析3.1 配置&#xff08;不理想&#xff09;3.2 配置优化3.3 优化配置短时间3D LockGlitch3.4 优化配置长时间3D DGPS Lock3.5 使用尽量多的卫星系统3.5.1 配置一3.5.2 配置二 3.6 同一时间段&#xff08;M8N…

3.3 泰勒公式例题分析

例1 写出函数f(x)带有拉格朗日余项的n阶麦克劳林公式 我的答案&#xff1a; 一、信息 1.f(x)的表达式 2.目标求这个f(x)的n阶麦克劳林公式 二、分析 条件1&#xff1a;告诉我f(x)的表达式为我后续带入公式做准备 条件2&#xff1a;告诉我用什么公式和此次求解的方向 三…