算法夜谈のhash问题

1.求串中元素不重复的最长子串

  时间:2014-3  出自:阿里电面

  例子:  [1,5,2,3,4,5,6,2,7]

  结果:  [2,3,4,5,6]

  解析:  典型的hash问题。

    1.遍历串,根据元素内容建立hash表,每个node存放此(起始位置,长度)。

    2.第一次碰到节点,长度设为0;以后每次碰到相同节点,要根据要求修改(起始位置,长度)。

      什么要求?如果元素位置-(起始位置+长度)>长度,那么起始位置=元素位置,长度=元素位置-(起始位置+长度)。

    3.最后,遍历hash表,根据最大的长度,得到起始位置,得到最长子串。

2.由0和1组成的串,求串中0和1数量相等的最长子串

  时间:2014-3  出自:高大神

  例子:  011010101000,这个例子不好弄,糊弄一个

  结果:  0110101010

  解析:  可以用hash来解决

    1.建立串长度的hash表,node存放(起始位置,长度)。

    2.s=0,遍历串a,每次s+=(a[i]=0?-1:1),根据s获取hash数组下标。如果node是空的,起始位置=i,长度=0;如果不为空,置长度=i-起始位置。

    3.最后,遍历hasn表,根据最大长度,得到最长子串。

posted on 2014-03-26 22:03  大咕咕  阅读(128)  评论(0)    收藏  举报

导航