分享

BAT面试算法进阶(4)- 无重复字符的最长子串(滑动法优化 ASCII码法)

 长沙7喜 2018-08-19


一.算法题

   题目

    Given a string, find the length of the longest substring without repeating characters.

  Example 

  • Given 'abcabcbb', the answer is 'abc', which the length is 3.

  • Given 'bbbbb', the answer is 'b', with the length of 1.

  • Given 'pwwkew', the answer is 'wke', with the length of

  • Note that the answer must be a substring, 'pwke' is a subsequence and not a substring.


二.算法题解读

     题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度

     解读Example

  • 给定'abcabcbb',没有重复字符的最长子串是'abc',那么长度就是3

  • 给定'bbbbb',最长子串就是'b',长度就是1

  • 给定pwwkew,最长子串就是'wke',长度为3,

  • 注意,必须是一个子串.'pwke',是子序列,而不是子串


三.优化'滑动窗口'解决思路

    到底如何在滑动窗口方法上优化了? 实际上我们可以如果采用进一步优化,可以达到只需要N次即可计算成功.我们可以定义字符到索引映射.而不是使用集合来判断这个字符的存在与否.当遇到重复的字符时,我们即可跳过该滑动窗口.

    也可以理解为,如果s[j][i,j)的范围内有与j'重复的字符.我们不需要逐渐增加i.而是直接跳过[i,j']范围内的所有元素.并将i变成为j'+1就可以做到.

四.代码实现

Java code


五.使用ASCII 128码 思路

    字符串,其实由字符构成.而字符则可以用ASC码来替代.如此,我们可以用整数数组作为直接访问表来替换Map.

常用表如下:
int [26],用于表示字母 'a' - 'z' 或 'A' - 'Z';
int [128],用于表示ASCII码
int [256],用于表示扩展ASCII码
A = 65, a = 97


六.代码实现

java code


小编OS:

如有疑问,留言即可.胖C会利用空余时间给大家做一个简单解答的.
持续更新关注公众号!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多