算法:求最长回文数

2023-11-08

题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
eg:输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案

eg:
输入: “cbbd”
输出: “bb”

C++
采用动态规划,是学习别人的,但在leetcode好像超时了,是是数组
Line 5: Char 21: runtime error: variable length array bound evaluates to non-positive value 0 (solution.cpp)

std::fill函数的作用是:将一个区间的元素都赋予指定的值,即在[first, last)范围内填充指定值。
std::fill_n函数的作用是:在[fist, fist + count)范围内填充指定值

class Solution {
public:
    string longestPalindrome(string s) {
        const int n=s.size();
        bool dp[n][n];
        fill_n(&dp[0][0],n*n,false);
        int max_len=1;
        int start=0;
        for(int j=0;j<s.size();++j)
        {
            for(int i=0;i<=j;++i)
            {
            //当dp[i][j] 中i=j是回文数,当j-i=1时判断s[i]==s[j],如果为真就是回文数
                if(j-i<2)
                    dp[i][j]=(s[i]==s[j]);
                 else      
                 //如果字串中j-i>=2,dp[i][j]是否为回文数取决是dp[i+1][j-1] (除开新的第一个和最后一个所构成的子串是否为回文数) s[i]==s[j](第一个是否与最后一个相等)          
					dp[i][j]=(s[i]==s[j] && dp[i+1][j-1]);
					//判断字串i到j是否为回文数,如果是,则求出起始位置,和串的长度。依次与前一次满足的回文数的长度判断,求出最大字串长度
                    if(dp[i][j] && max_len<j-i+1)
                    {
                        max_len=j-i+1;
                        start=i;
                    } 
            }
        }
        //不同点:第二个参数substr(startIndex,lenth): 第二个参数是截取字符串的长度(从起始点截取某个长度的字符串);substring(startIndex, endIndex): 第二个参数是截取字符串最终的下标 (截取2个位置之间的字符串,‘含头不含尾’)。
        //截取s字符串从start的开始位置长度为max_len字串
        return s.substr(start,max_len);
    }
};

string stringToString(string input) {
    assert(input.length() >= 2);
    string result;
    for (int i = 1; i < input.length() -1; i++) {
        char currentChar = input[i];
        if (input[i] == '\\') {
            char nextChar = input[i+1];
            switch (nextChar) {
                case '\"': result.push_back('\"'); break;
                case '/' : result.push_back('/'); break;
                case '\\': result.push_back('\\'); break;
                case 'b' : result.push_back('\b'); break;
                case 'f' : result.push_back('\f'); break;
                case 'r' : result.push_back('\r'); break;
                case 'n' : result.push_back('\n'); break;
                case 't' : result.push_back('\t'); break;
                default: break;
            }
            i++;
        } else {
          result.push_back(currentChar);
        }
    }
    return result;
}

int main() {
    string line;
    while (getline(cin, line)) {
        string s = stringToString(line);
       
        string ret = Solution().longestPalindrome(s);

        string out = (ret);
        cout << out << endl;
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法:求最长回文数 的相关文章

  • Python学习之路:time和datetime模块

    转自 http blog 51cto com egon09 1840425 一 内建模块 time和datetime http www jb51 net article 49326 htm 在Python中 通常有这几种方式来表示时间 1
  • 加速Nerf训练:nerfacc

    加速Nerf训练 nerfacc 0 引言 1 NerfAcc加速原理 1 1 跳过空区域与遮挡区域 Pruning Empty and Occluded Regions 1 2 GPU层面 1 3 场景压缩 Scene Contracti

随机推荐

  • MongoDB连接本地失败解决办法

    MongoDB连接本地失败解决办法 错误原因 解决办法 在mongodb目录中新建一个data文件夹 如果有就不用建 进入data文件夹 建立db和log两个文件夹 如果有就不用新建 打开CMD 进入到mongodb 的 bin目录 输入指
  • Spring 中的 @Cacheable 缓存注解,太好用了!

    1 什么是缓存 第一个问题 首先要搞明白什么是缓存 缓存的意义是什么 对于普通业务 如果要查询一个数据 一般直接select数据库进行查找 但是在高流量的情况下 直接查找数据库就会成为性能的瓶颈 因为数据库查找的流程是先要从磁盘拿到数据 再
  • 彩虹6号怎么修改服务器,彩虹6号修改服务器地址

    彩虹6号修改服务器地址 内容精选 换一换 修改云服务器信息 目前支持修改云服务器名称及描述和hostname 该接口支持企业项目细粒度权限的校验 具体细粒度请参见 ecs cloudServers put云服务器hostname修改后 需要
  • C#常见简答题

    静态类和静态方法的好处与缺陷 1 好处是 在外部调用静态方法时 可以使用 类名 方法名 的方式 也可以使用 对象名 方法名 的方式 而实例方法只有后面这种方式 也就是说 调用静态方法可以无需创建对象 2 缺陷是 静态方法在访问本类的成员时
  • .el-dialog弹窗垂直居中(重点::兼容IE)

    el dialog display flex display ms flex 兼容IE flex direction column ms flex direction column 兼容IE margin 0 important posit
  • 浮点数与数组的转换

    一 指针方式 include
  • Servlet+JDBC实战开发书店项目讲解第12讲:会员管理功能

    Servlet JDBC实战开发书店项目讲解第12讲 会员管理功能 实现思路 显示会员列表 创建一个管理页面 用于显示所有会员的信息 在后端 创建一个Servlet来处理显示会员列表的请求 在该Servlet中 通过JDBC从数据库中检索会
  • MinGW、GCC、qMake等编译工具的区别

    MSVC在Windows下编译C和C gcc g 分别是GNU的C 和 C 编译器 在Linux 下面用 cmake qmake分别用来编译C和QT工程 输入是makefile 输出结果是可执行文件 编译的过程会调用编译器和连接器来完成整个
  • 百万并发服务器设计

    文章目录 前言 1 改造ntyreactor 2 如何管理eventblock 创建一个eventblock 查找对应fd在那个eventblock上 具体使用 3 总结 前言 本文的基础以及使用的代码模型都继承自上一篇文章 所以请先详细阅
  • 大模型时代下做科研的四个思路

    背景 在模型越来越大的时代背景下 如何利用有限的资源做出一些科研工作 四个方向 1 Efficient PEFT 提升训练效率 这里以PEFT parameter efficient fine tuning 为例 2 Existing st
  • linux查看磁盘IO,网络IO 总结

    一 linux查看磁盘IO 网络 IO可用的命令 1 top 监控整体服务器 cpu 内存 磁盘 网络等 2 dstat d 查看当前磁盘每秒的读取 写入量 单位K 3 dstat r 查看当前磁盘随机的读IOPS 写IOPS 4 dsta
  • 一款简单的角度计算Python包:PyAngle

    一款简单的角度计算Python包 PyAngle GitHub仓库 gzn00417 PyAngle PyPI项目 PyAngle A simple package for angle calculation Use pip install
  • ubuntu下载的国内镜像

    阿里云镜像
  • 惊爆GPT OpenAPI的调用以及API内的参数详解

    开篇 随着人工智能技术的飞速发展 自然语言处理技术 NLP 在过去几年也取得了突飞猛进的突破 在这个过程中 一个重要且可称为颠覆者的模型 GPT 3 第三代生成式预训练 Transformer 模型 的诞生 无疑大大加速了 NLP 领域的前
  • 以太坊智能合约安全编程最佳实践smart-contract-best-practices

    https github com ConsenSys smart contract best practices Ethereum Contract Security Techniques and Tips The recent attac
  • Web UI自动化测试之Selenium工具篇

    本文大纲截图 一 自动化测试介绍 1 基本介绍 1 1 自动化 概念 由机器设备代替人工自动完成指定目标的过程 优点 1 减少人工劳动力 2 提高工作效率 3 产品规格统一标准 4 规模化 批量生产 1 2 自动化测试 软件测试 校验系统是
  • 今天我抓了个 HTTPS 的包

    之前写过一篇讲 HTTPS 的思想的文章 破玩意 用 HTTPS 传纸条 后来又写了篇用更凝练的语言总体描述了 HTTPS 的主干 叮咚 HTTPS 的分支和主干 想必通过这两篇文章 HTTPS 为什么要这么设计 以及它是用来解决什么问题的
  • Android 使用retrofit解析接口返回的xml格式数据

    直接入正题 需要解析的数据格式为 从数据格式上看 上面都是单个字段的解析 下面则是一个数组 解析过程 1 添加retrofit预返回数据处理类型 2 添加返回数据处理类 也就是后面会用的 在上图中可以看到将xml的数据结构在XmlLogin
  • Matlab实现神经网络(附上100个完整仿真源码+说明文档+数据)

    神经网络是一种模仿人类神经系统 以处理信息为目的的计算模型 它由大量节点 或称神经元 和连接它们的边组成 每个节点代表一个变量 边表示变量之间的关系 在神经网络中 信息通过节点之间的连接传递 并在各个节点之间进行处理和转换 Matlab是一
  • 算法:求最长回文数

    题目 给定一个字符串 s 找到 s 中最长的回文子串 你可以假设 s 的最大长度为 1000 eg 输入 babad 输出 bab 注意 aba 也是一个有效答案 eg 输入 cbbd 输出 bb C 采用动态规划 是学习别人的 但在lee