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

news2024/11/24 12:05:06

文章目录

  • 前言
  • 一、题目
  • 二、解题
    • 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));
找出最大值就完事!


总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文解读】(如何微调BERT?) How to Fine-Tune BERT for Text Classification?

文章目录 论文信息1. 论文内容2. 论文结论2.1 微调流程2.2 微调策略(Fine-Tuning Strategies)2.3 Further Pretrain 3. 论文实验介绍3.1 实验数据集介绍3.2 实验超参数3.3 Fine-Tuning策略探索3.3.1 处理长文本3.3.2 不同层的特征探索3.3.3 学习率探索&#xff08;灾难性遗忘探…

Baumer工业相机堡盟相机如何使用ROI感兴趣区域功能( PARTIAL SCAN ROI功能的优点和行业应用)(C#)

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机&#xff0c;可用于各种应用场景&#xff0c;如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能&#xff0c;可以实时传输高分辨率图像。此外&#xff0c;该相机还具…

利用 ChatGPT4 回复的 markdown 文本生成 ppt

本篇博文不涉及账号以及基础网络知识&#xff0c;大伙可以自动搜索。 比如我最近要分享一篇关于 TCP 的分享&#xff0c;那么我可以设置如下 Prompt 我最近要做一篇关于 tcp 入门的 ppt 分享&#xff0c;帮我列出大纲以及需要注意的事项&#xff1f; 接下来就是 ChatGPT4 给…

RocketMQ的学习历程(3)----RocketMQ部署(docker版)

RocketMQ部署&#xff08;docker版&#xff09; 1. 部署开始前的准备 一台linux机器。(我这里使用的是阿里云的一个centos7的服务器)docker环境以及相关的简单知识。一些计算机网络的简单知识。&#xff08;可以帮你透彻了解为什么这么部署&#xff09; docker部署十分简单快捷…

JAVA85-135

JAVA85-135 字符集详解解码与编码方法 字符流FileWriter 拷贝文件夹字节缓冲流拷贝文件&#xff08;一次读写一个字节&#xff09;字节缓冲流拷贝文件&#xff08;一次读写一个字节数组&#xff09; 字符缓冲流控制软件运行次数 序列化流反序列化流/对象操作输入流打印流字节打…

macOS Monterey 12.6.5 (21G531) OC 0.9.1 / Cl 5151 / PE 三分区原版黑苹果镜像

苹果近期发布了 macOS Big Sur 11.7.6 和 macOS Monterey 12.6.5 更新&#xff0c;本次更新重点修复了标记为 CVE-2023-28206 的漏洞&#xff0c;在 macOS 13.3.1 更新中已修复&#xff0c;推荐大家安装升级。 镜像下载&#xff1a; macOS Monterey 12.6.5 (21G531) 三分区原版…

【面试】嵌入式C语言题目整理

【面试】嵌入式C语言题目整理 描述内存四区。 内存四区分为&#xff1a;代码区、静态区、堆区、栈区 代码区就是用来存放代码的。 静态区用来存放全局变量、静态变量、常量&#xff08;字符串常量、const修饰的全局变量&#xff09;。 堆区中的内存是由程序员自己申请和释放的&…

《高性能MySQL》读书笔记

《高性能MySQL》 第一章 MySQL架构与历史第二章 MySQL基准测试第三章 服务器性能剖析第四章 Schema与数据类型优化第五章 创建高性能的索引第六章 查询性能优化第七章 MySQL高级特性第八章 优化服务器设置第九章 操作系统与硬件优化第十章 复制第十一章 可扩展的MySQL第十二章 …

sed进阶之多行命令

shell脚本编程系列 前面使用sed编辑器的基础命令时&#xff0c;所有的命令都是针对单行数据执行操作的。在sed编辑器读取数据流时&#xff0c;它会根据换行符的位置将数据分成行。sed编辑器会根据定义好的脚本命令&#xff0c;一次处理一行数据&#xff0c;然后移到下一行重复这…

numpy稀疏矩阵拼接

今天我发现numpy中的array拼接时dense矩阵和sparse矩阵拼接使用的形式是不一样的&#xff0c;测试如下 普通矩阵拼接 import numpy as npaa np.random.randn(4,3) bb np.ones((4,3)) ccnp.c_[aa,bb] cc.shape结果如下 sparse矩阵拼接 from scipy.sparse import *row [1,1,…

DC-7通关详解

信息收集 漏洞发现 web提示我们说弱口令可能不会奏效 那么我们就先不考虑弱口令 searchsploit搜payload打打看,无果 看别人的wp知道了是通过web左下角的这个玩意去github搜 在这个仓库用户唯一的仓库中看config.php 发现账号密码 尝试后台和ssh登录 ssh登录成功 提权 当前…

一款免安装、多平台兼容的 拾色器(Color Picker)

文章目录 场景需求场景需求 Chrome Google DevTools 中的 拾色器 用法其他浏览器 场景需求 场景 我是一个前端开发人员&#xff0c;我写好的界面给老板过目。老板说有个地方颜色需要调整&#xff0c;然后发我一张图片指了指说就用这个位置这样的红色&#xff0c;我看挺合适。…

数字化时代 | 服务数字化创新和转型全景视图

本文我全面介绍一下数字化时代&#xff0c;服务将往何处去&#xff0c;将如何设计和推进数字化创新和转型。 Figure 1 服务创新和转型全景视图 如上图所示&#xff0c;在我CRM3.0理论体系中&#xff0c;服务创新和转型涉及到四个层面的内容&#xff1a; 服务定位和目标&#…

Python数据分析script必备知识(三)

Python数据分析script必备知识(三) 1.单个文件,双个文件,三个文件的读取方式 新建1.txt文件,2.txt文件,3.txt文件,效果如下 执行代码 """ 单文件,双文件,三文件的读取方式Python的读写 file.read() ———— 一次性读取整个文件内容,推荐使用re…

【信息安全案例】——系统软件安全(学习笔记)

&#x1f4d6; 前言&#xff1a;操作系统是管理系统资源、控制程序执行、提供良好人机界面和各种服务的一种系统软件&#xff0c;是连接计算机硬件与上层软件和用户之间的桥梁。因此&#xff0c;操作系统是其他系统软件、应用软件运行的基础&#xff0c;操作系统的安全性对于保…

React框架课时二认识项目的结构目录一

1react项目的目录的内容信息 ├── README.md 使用方法的文档 ├── node_modules 所有的依赖安装的目录 ├── package-lock.json 锁定安装时的包的版本号,保证团队的依赖能保证一致。 ├── package.json ├── public 静态公共目录 └── src 开发用的源代码目录 2 图…

英伟达Jetson NX,AI配置。安装SDK Components

目录 0.前言 1.准备 2.安装 3.检验 4.总结 0.前言 五一了&#xff0c;劳动节劳个动。推荐一首歌《花房姑娘》。 1.准备 接上篇博客英伟达Jetson NX套件刷机 算是完整配置英伟达这个Jetson AI。说来也是强&#xff0c;把GPU的能力用在了算力上&#xff0c;CUDA可以的。 查看…

SqlServer数据库中文乱码问题解决方法

这个问题在网上找了很多资料都没找到真正解决问题的办法&#xff0c;最终去了官网&#xff0c;终于找到问题的答案了&#xff0c;整理出来做个记录。 问题描述&#xff1a; 项目中遇到一个问题&#xff0c;sqlserver中的数据是ok的&#xff0c;结果保存到mysql中是乱码&#…

PostgreSQL数据库

0 安装 我使用的操作系统为Ubuntu。 安装命令&#xff1a; sudo apt-get update sudo apt-get install postgresql postgresql-client 进入postgres&#xff1a; sudo -i -u postgres psql 退出命令&#xff1a; \q PostgreSQL启动服务等&#xff1a; sudo /etc/init.d/postgr…

KalLinux安装burpsuite(超详细)

注意事项 1.注意linux位数 安装jdk之前先输出uname -a&#xff0c;看看kali linux是32位的还是64位&#xff0c;例如此处我的kali是32位的&#xff0c;因此需下载的是32位的jdk 2.jdk版本 jdk版本最好是oracle的&#xff0c;若使用的是openjdk很可能会出现burpsuite闪退现象…