[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)

题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题目: Given a str...
  • j754379117
  • j754379117
  • 2016年06月20日 20:36
  • 839

LeetCode(3) Longest Substring Without Repeating Characters

LeetCode的第3题,给定一个字符串,找到其中的一个最长的字串,使得这个子串不包含重复的字符。 // // Solution.h // LeetCodeOJ_003_LongestUnique...
  • feliciafay
  • feliciafay
  • 2013年11月23日 04:25
  • 16833

LeetCode 3 — Longest Substring Without Repeating Characters (C++ Java Python)

题目:http://oj.leetcode.com/problems/longest-substring-without-repeating-characters/] Given a string, ...
  • dragon_dream
  • dragon_dream
  • 2014年02月18日 22:22
  • 4656

LeetCode 3.Longest Substring Without Repeating Characters c语言版

问题描述: Given a string, find the length of the longest substring without repeating characters. Exa...
  • banana1006034246
  • banana1006034246
  • 2017年07月15日 17:35
  • 294

Longest Substring Without Repeating Characters -- LeetCode

原题链接: http://oj.leetcode.com/problems/longest-substring-without-repeating-characters/  这道题用的方法是在Leet...
  • linhuanmars
  • linhuanmars
  • 2014年02月26日 01:53
  • 18821

[LeetCode] 003. Longest Substring Without Repeating Characters (Medium) (C++/Java/Python)

[LeetCode] 003. Longest Substring Without Repeating Characters (Medium) (C++/Java/Python)
  • hcbbt
  • hcbbt
  • 2015年02月27日 12:55
  • 5777

leetcode python - Longest Substring Without Repeating Characters

# Given a string, find the length of the longest substring without repeating characters. # # Example...
  • AMDS123
  • AMDS123
  • 2017年04月01日 15:07
  • 6332

leetcode 3 Longest Substring Without Repeating Characters最长无重复子串

Given a string, find the length of the longest substring without repeating characters. For example, ...
  • wangyaninglm
  • wangyaninglm
  • 2016年04月05日 22:27
  • 2659

LeetCode 第三题,Longest Substring Without Repeating Characters

题目: Given a string, find the length of the longest substring without repeating characters. For examp...
  • hu1020935219
  • hu1020935219
  • 2014年08月03日 20:38
  • 7627

Longest Substring Without Repeating Characters 最长不重复字符的字串 @LeetCode

Method 1 (Simple) We can consider all substrings one by one and check for each substring whether it ...
  • hellobinfeng
  • hellobinfeng
  • 2014年01月05日 01:56
  • 3308
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode][3]Longest Substring Without Repeating Characters解析 -Java实现
举报原因:
原因补充:

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