首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str

2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str

作者头像
福大大架构师每日一题
发布于 2021-08-06 02:33:34
发布于 2021-08-06 02:33:34
34800
代码可运行
举报
运行总次数:0
代码可运行

2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str = “aba”,回文子序列:{a}、{a}、 {a,a}、 {b}、{a,b,a},返回5。

福大大 答案2021-08-04:

范围尝试模型。

dp[L][R]。

4种情况。

1.不包含L,不包含R。

2.不包含L,包含R。

3.包含L,不包含R。

4.包含L,包含R。

dp[L][R]依赖dp[L+1][R],dp[L][R-1],dp[L+1][R-1]。

时间复杂度:O(N**2)。

空间复杂度:O(N**2)。

代码用golang编写。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import "fmt"

func main() {
    ret := ways2("acac")
    fmt.Println(ret)
}

func ways2(str string) int {
    if len(str) == 0 {
        return 0
    }
    n := len(str)
    dp := make([][]int, n)
    for i := 0; i < n; i++ {
        dp[i] = make([]int, n)
    }
    for i := 0; i < n; i++ {
        dp[i][i] = 1
    }
    for i := 0; i < n-1; i++ {
        if str[i] == str[i+1] {
            dp[i][i+1] = 3
        } else {
            dp[i][i+1] = 2
        }
    }
    for L := n - 3; L >= 0; L-- {
        for R := L + 2; R < n; R++ {
            dp[L][R] = dp[L+1][R] + dp[L][R-1] - dp[L+1][R-1]
            if str[L] == str[R] {
                dp[L][R] += dp[L+1][R-1] + 1
            }
        }
    }
    return dp[0][n-1]
}

执行结果如下:

***

[左神java代码](https://github.com/algorithmzuo/coding-for-great-offer/blob/main/src/class20/Code04_PalindromeWays.java)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
高性能网络通信框架Netty-基础概念篇
Netty是一种可以轻松快速的开发协议服务器和客户端网络应用程序的NIO框架,它大大简化了TCP或者UDP服务器的网络编程,但是你仍然可以访问和使用底层的API,Netty只是对其进行了高层的抽象。
加多
2018/09/06
6080
高性能网络通信框架Netty-基础概念篇
【Netty】Netty初识篇
Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
用户3467126
2019/07/03
1.2K0
谈谈Netty的线程模型
Netty是一个异步、基于事件驱动的网络应用程序框架,其对 Java NIO进行了封装,大大简化了 TCP 或者 UDP 服务器的网络编程。其应用还是比较广泛的,比如Apache Dubbo 、Apache RocketMq、Zuul 2.0服务网关、Spring WebFlux、Sofa-Bolt 底层网络通讯都是基于 Netty 来实现的,本节我们谈谈Netty4中的线程模型。
加多
2019/08/23
9430
谈谈Netty的线程模型
【Netty】服务端和客户端
1、创建ServerBootStrap实例 2、设置并绑定Reactor线程池:EventLoopGroup,EventLoop就是处理所有注册到本线程的Selector上面的Channel 3、设置并绑定服务端的channel 4、5、创建处理网络事件的ChannelPipeline和handler,网络时间以流的形式在其中流转,handler完成多数的功能定制:比如编解码 SSl安全认证 6、绑定并启动监听端口 7、当轮训到准备就绪的channel后,由Reactor线程:NioEventLoop执行pipline中的方法,最终调度并执行channelHandler
用户3467126
2019/07/03
1.1K0
【Netty】服务端和客户端
Netty框架学习及第一个Netty应用「建议收藏」
Netty是一个利用Java的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的API的客户端/服务器框架。Netty提供高性能和可扩展性,让你可以自由地专注于你真正感兴趣的东西。
全栈程序员站长
2022/07/23
5770
Netty框架学习及第一个Netty应用「建议收藏」
Netty 的 Channel、Promise、Pipeline 详解
首先通过一个示例来分析,创建一个 NioServerSocketChannel 监听本机端口 11111 的 Socket 连接,将收到的消息原样返回;然后再创建一个 NioSocketChannel,发起对本机的 11111 端口的 Socket 连接,发送字符串 ”Netty rocks!“。预期能收到服务端返回的 “Netty rocks!” 响应。
Yano_nankai
2019/11/10
4.5K0
Netty 的 Channel、Promise、Pipeline 详解
详细图解Netty Reactor启动全流程 | 万字长文 | 多图预警
大家先不要惊慌,问题不大,本文笔者的目的就是要让大家清晰的理解这幅流程图,从而深刻的理解Netty Reactor的启动全流程,包括其中涉及到的各种代码设计实现细节。
bin的技术小屋
2022/07/22
1.4K0
详细图解Netty Reactor启动全流程 | 万字长文 | 多图预警
Netty | 属于你的第一款Netty应用程序
我在这里偷懒了,直接是导入了netty-all,如果不想的话,大家可以用到什么导入什么,因为Netty支持的特别广,所以有不同的Jar包。
宁在春
2022/10/31
3670
Netty | 属于你的第一款Netty应用程序
Netty 系列一(核心组件和实例).
    早期的 Java API 只支持由本地系统套接字库提供所谓的阻塞函数来支持网络编程。由于是阻塞 I/O ,要管理多个并发客户端,需要为每个新的客户端Socket 创建一个 Thread 。这将导致一系列的问题,第一,在任何时候都可能有大量的线程处于休眠状态(不可能每时每刻都有对应的并发数);第二,需要为每个线程的调用栈都分配内存;第三,JVM 在线程的上下文切换所带来的开销会带来麻烦。
JMCui
2018/08/01
6040
Netty 系列一(核心组件和实例).
深入理解Netty与NIO:原理与关键组件解析
在现代分布式系统和网络应用开发中,高性能、低延迟的网络通信是至关重要的。Netty作为一个强大的网络框架,广泛应用于构建各种高性能的网络应用。而NIO(New I/O)则是Java提供的一种非阻塞I/O模型,它为高效的网络通信提供了基础支持。本文将深入探讨Netty和NIO的原理,以及它们的关键组件,帮助你更好地理解和应用这些技术。
疯狂的KK
2023/09/22
1.1K0
深入理解Netty与NIO:原理与关键组件解析
面试官:说说Netty的核心组件?
Netty 核心组件是指 Netty 在执行过程中所涉及到的重要概念,这些核心组件共同组成了 Netty 框架,使 Netty 框架能够正常的运行。
磊哥
2024/05/30
8290
java简单使用netty
由于本人的学过的技术太多太乱了,于是决定一个一个的整合到一个springboot项目里面。
ydymz
2018/12/04
1.5K0
异步编程 - 12 异步、基于事件驱动的网络编程框架 Netty
Netty是一个异步、基于事件驱动的网络应用程序框架,其对Java NIO进行了封装,大大简化了TCP或者UDP服务器的网络编程开发。
小小工匠
2023/09/09
8220
异步编程 - 12 异步、基于事件驱动的网络编程框架 Netty
史诗级最强教科书式“NIO与Netty编程”
java.nio全称java non-blocking IO,是指JDK1.4开始提供的新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,也被称为NIO(既New IO),新增了许多用于处理输入输出的类,这些类都被放在java.nio包及子包下,并且对原java.io包中的很多类进行改写,新增类满足NIO的功能。 NIO和BIO有着相同的目的和作用,但是它们的实现方式完全不同,BIO以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O高很多。另外,NIO是非阻塞式的,这一点跟BIO也很不相同,使用它可以提供非阻塞式的高伸缩性网络。 NIO主要有三大核心部分 :Channel(通道),Buffer(缓冲区),Selector(选择器)。传统的BIO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如 :连接打开,数据到达)。因此使用单个线程就可以监听多个数据管道。
海仔
2019/08/26
9980
史诗级最强教科书式“NIO与Netty编程”
Netty 源码解析 ——— 服务端启动流程 (下)
本文是Netty文集中“Netty 源码解析”系列的文章。主要对Netty的重要流程以及类进行源码解析,以使得我们更好的去使用Netty。Netty是一个非常优秀的网络框架,对其源码解读的过程也是不断学习的过程。 本文接Netty 源码解析 ——— 服务端启动流程 (上)继续解析Netty服务器启动流程的剩下步骤 重要类介绍 在讲解源码之前,同样我们先对该篇文字这涉及到的几个Netty中的重要的类进行简单的介绍。 ChannelFuture ChannelFuture是针对于Channel的一个Fut
tomas家的小拨浪鼓
2018/06/27
1.3K0
一篇文章入门Netty
什么是Netty?Netty是一个框架。或者说是一个工具集。封装了网络编程方面java的API。 Netty有哪些核心组件? Channel:java nio的基本构造,代表一个实体(硬件设备、文件
爬蜥
2019/07/09
4070
聊聊 Netty 那些事儿之 Reactor 在 Netty 中的实现(创建篇)
在上篇文章《聊聊Netty那些事儿之从内核角度看IO模型》中我们花了大量的篇幅来从内核角度详细讲述了五种IO模型的演进过程以及ReactorIO线程模型的底层基石IO多路复用技术在内核中的实现原理。
bin的技术小屋
2022/07/20
1.4K1
聊聊 Netty 那些事儿之 Reactor 在 Netty 中的实现(创建篇)
Netty Review - 核心组件扫盲
如果Handler处理器有一些长时间的业务处理,可以交给taskQueue异步处理。
小小工匠
2023/11/15
5800
Netty Review - 核心组件扫盲
超详细Netty入门,看这篇就够了!
本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。
java技术爱好者
2020/09/22
1.6K0
超详细Netty入门,看这篇就够了!
Netty - 回顾Netty高性能原理和框架架构解析
Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
小小工匠
2023/11/12
2.5K0
Netty - 回顾Netty高性能原理和框架架构解析
相关推荐
高性能网络通信框架Netty-基础概念篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验