Leecode-无重复字符的最长子串

import java.util.LinkedList;
import java.util.TreeSet;

class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {

public Solution() {}
// TODO Auto-generated constructor stub




public static int lengthOfLongestSubstring(String s) {

/*伪代码
* 初始化一个链表集合作为寻找最大不重复子串的临时存储位置
* 初始化最大长度count为0
* 遍历整个字符串
* 如果该字符在链表中不重复,加入集合
* 如果该字符在链表中已存在,首先比较当前链表长度与原coun最大值记录到count;然后删除链表链表中从开头到该重复字符(包括该字符)这段字符串;最后然后将该字符加入链表
* 遍历完成后,再比较链表长度与count,取大值为count
* 选择linkedList原因:对删除操作友好;保持插入顺序
*/



int re_count=0,curr_count=0;
LinkedList<Character> link=new LinkedList<>();
for(int i=0;i<s.length();i++){
char curr_ch = s.charAt(i);
if(link.contains(curr_ch)){

curr_count = link.size();
re_count = re_count>curr_count?re_count:curr_count;//找大数
link.subList(0, link.indexOf(curr_ch)+1).clear();//删除包含重复元素及之前的。
link.add(curr_ch);//添加该元素
}else{
link.add(curr_ch);
}
}
curr_count = link.size();
re_count = re_count>curr_count?re_count:curr_count;//找大数_
return re_count;
}


public static void main(String[] args) {
// TODO Auto-generated method stub

System.out.println(lengthOfLongestSubstring("dvdf"));

}

}

posted @ 2019-06-15 19:27  gsx  阅读(102)  评论(0编辑  收藏  举报