数据结构与算法分析笔记与总结(java实现)--字符串12:最长无重复字符子串练习题

题目:对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度。

给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度。保证A中字符全部为小写英文字符,且长度小于等于500。测试样例:"aabcb",5返回:3

思路:何为无重复子串,所谓无重复子串是指内部没有相同的字符的字符串,在遍历一个字符串时,如果遇到的字符串在之前的字符串中已经存在了那么这个字符串就不再是无重复字符串了。题目要求最终返回无重复子串的最长值。本题技巧性较强,我们知道一个字符串必定有头有尾,在求最长无重复字符串时可以遍历字符串,从头开始计算从该字符开始的最长无重复字符串长度,直到遇到重复的字符为止,逐个字符求从该字符开始的最长长度,逐步保留最长长度,当数组遍历完成时就得到了整个数组中最长无重复字符串的长度。但是这样从头开始求不重复长度每个字符需要再遍历n个字符,时间复杂度是O(n^2)。换种思路,遍历字符串数组,计算以每个字符结尾的字符串中的最长无重复长度,算出他的长度,遍历数组,即计算以每个字符结尾的最长无重复字符串长度,保留最长长度值,当数组遍历完成时就得到了整个数组的最长无重复长度。关键是如何求以每个字符结尾的最长无重复长度。这里利用动态规划的思想,计算某个字符array[i]的最长无重复长度,就是需要得到从该字符array[i]开始向左最远可以到达哪里使得字符串不出现重复,即确定某个位置array[A],在array[A]~ array[i]之间没有重复字符,array[i]再往左就出现了重复字符,于是对于每个字符array[i],关键是确定它的最左边的不重复字符的位置A,而这个位置A是如何确定的呢?A的位置来源有两种可能:对于a

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值