最长无重复子串的DP实现

本文探讨了如何使用动态规划(DP)解决寻找字符串中最长无重复子串的问题。虽然该问题可能不具有典型的最优子结构,但通过分析两种情况,即字符是否在之前的子串中出现,可以实现解决方案。文中建议使用C++11的unordered_map或数组(如C++11的Array)来存储数据,并强调了在使用数组时需要注意初始化和下标操作的细节,以避免错误。通过这种方法,相比于其他方案,运行时间显著降低,如在1000多个测试用例中,执行时间从380MS减少到144MS。
摘要由CSDN通过智能技术生成

这道题能算DP吗?那要看是否具备最优子结构。我的分析是没有明显的子结构性质。

例如当求下标为 i 的最长无重复子串时,要考虑两类情况。(len表示当前处理的子串的长度)

(1) s[ i ] 是否在字符串s之前的位置出现过,如果没有则长度 len++ ;

(2) 如果出现过,分两种情况讨论(出现在当前处理的子串中?)

         a> 是。那好办,直接更新len = i -  [出现位置下标] ;

         b> 否。更好办,直接更新 len++。

分析可见,并没有什么最优子结构,DP也谈不上吧。


数据结构:

可采用C++11的unorde

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值