剑指offer第二版面试题48:最长不含重复字符的最大子串
发布时间
阅读量:
阅读量
题目描述:
要求从给定的字符串中识别出一个不含重复字符的最长子字符串,并求出该子字符串的长度。假设字符串仅由小写字母’a’至’z’组成。例如,在字符串”arabcacfr”中,最长非重复子字符串为”acfr”,其长度为4。
分析思路:
采用动态规划的方法,记录当前字符之前所对应的最长非重复子字符串长度f(i-1),其中i表示当前字符的位置。在遍历每个字符时,需要考虑两种情况:
1)如果当前字符是首次出现,则当前的最长非重复子字符串长度f(i) = f(i-1)+1。
2)如果当前字符已经出现过,则先计算该字符与其上一次出现位置之间的距离d。若d大于f(i-1),表明前一个非重复子字符串中未包含该字符,因此可以将当前字符加入到前一个非重复子字符串中,此时f(i) = f(i-1)+1。若d小于或等于f(i-1),则说明前一个非重复子字符串中已包含该字符,无法将其加入,此时f(i) = d。
代码如下:
写法1
/** * 最长不含重复字符的子字符串
*/
public class LongestSubString {
public int longestSubStringWithout(String str) {
int[] position = new int[26];
全部评论 (0)
还没有任何评论哟~
