算法夜谈の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表,根据最大长度,得到最长子串。
浙公网安备 33010602011771号