[LeetCode][3]Longest Substring Without Repeating Characters解析 -Java实现

原创 2016年06月01日 18:34:14

A:

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

Q:

以下解法和代码没有借阅以往任何资料,如果有更好的解法请在评论区留言

大致意思就是给你一个字符串,找出里面最长的不重复的字符串。反正我的第一反应如下(灵感来源于Android源码中对双击,三击的判断)

1、创建一个link和一个storelink

2、每遇到一个字母都对比上一个如果不一样就存入link,直到一样,把link存入storelink,然后重复步骤2(需要对比link和storelink,长的留下,短的删掉,类似于排序)

3、字符串结束,找出两个array中长的那个。

仔细想后还有一个办法,就是模拟正则的过程

1、遍历字符数组,找出相同的字母用单个字幕替换记录下位置

1、新建一个字符串,如果下一个字符和上一个一样则不接在新字符串上并且记录位置,如果不一样则接上

  2、返回新字符串

2、对比长度,找出最常

3、截取返回

我们对比两个办法第一个办法需要两个链表(link)和一个原本的字符串而方法2只需要两个字符串

方法1需要每次相同字母对比还需要两个link对比方法2只需要字母对比,但是最后还是需要长度对比

那么我们知道对比肯定是要有一次在相同字母上,一次在长度上,我们也没办法减了(有的话请告诉我),只能在空间上减缩,方法2如下(原本有写一个更节俭空间的,但是那个代码太长了,提供思路:记录字符串不重复的起始位置和结束位置,可以节省一个字符串)

代码如下

public class LongestSubstringWithoutRepeatingCharacters {
	public static void main(String[] args){
		String a = "assssdffdsafssdg";
		System.out.println(method(a));
	}
	public static String method(String s){
		String noRepate = "";
		boolean flag = true;//是不是第一次重复
		char lastChar = ' ';
		char[] array = s.toCharArray();
		LinkedList interval = new LinkedList();
		interval.addLast(0);
		for(int i = 0 ; i<array.length;i++){
			if(lastChar!=array[i]){//不重复
				lastChar = array[i];
				noRepate+=array[i];
				flag = true;
			}else{//重复了
				if(flag){
					flag = false;
					interval.addLast(i);
				}
			}
		}
		interval.addLast(array.length-1);
		int maxInterval = 0;
		int position = 0;
		for(int i = 1;i<interval.size();i++){
			int inter = (int)interval.get(i)-(int)interval.get(i-1);
			if(inter>maxInterval){
				maxInterval = inter;
				position = i;
			}
		}
		return s.substring((int)interval.get(position-1),(int)interval.get(position));
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

leetcode解题之3. Longest Substring Without Repeating Characters Java版(最长子串长度)

leetcode解题之3. Longest Substring Without Repeating Characters Java版(最长子串)

LeetCode(3) Longest Substring Without Repeating Characters

LeetCode的第3题,给定一个字符串,找到其中的一个最长的字串,使得这个子串不包含重复的字符。 // // Solution.h // LeetCodeOJ_003_LongestUnique...

LeetCode【3】.Longest Substring Without Repeating Characters--算法图解及java实现

第三道题Longest Substring Without Repeating Characters如下:      public class Solution { public in...

[LeetCode-Java]3. Longest Substring Without Repeating Characters

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

[leetcode]3. Longest Substring Without Repeating Characters(Java)

https://leetcode.com/problems/longest-substring-without-repeating-characters/#/description ...

LeetCode(java)3. Longest Substring Without Repeating Characters

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

[LeetCode]3 Longest Substring Without Repeating Characters (C++,Python实现)

LeetCode OJ的第三题,如果有问题或者给我指点欢迎来信讨论ms08.shiroh@gmail.com

【LeetCode-面试算法经典-Java实现】【003-Longest Substring Without Repeating Characters(最长非重复子字符串)】

【003-Longest Substring Without Repeating Characters(最长非重复子字符串)】给定一个字符串,找字符中的最大非重复子串用start记录当前处理的开始位置...

[LeetCode - 滑动窗口] 3. Longest Substring Without Repeating Characters

1 问题 Given a string, find the length of the longest substring without repeating characters. Exa...

LeetCode- 3. Longest Substring Without Repeating Characters

Description Given a string, find the length of the longest substring without repeating characters.E...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode][3]Longest Substring Without Repeating Characters解析 -Java实现
举报原因:
原因补充:

(最多只允许输入30个字)