最长不含重复字符的子字符串
题目描述
输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度。例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4。
package cn.cqu.edu;
import java.util.HashMap;
import java.util.Map;
public class MostLongStr {
Map<Character,Integer> map=new HashMap<>();
public String count(String str)
{
char[] chs=str.toCharArray();
int n=chs.length;
int max_len=0;
int max_index=0;
int cur_len=0;
for(int i=0;i<n;i++)
{
if(map.get(str.charAt(i))==null)
{
cur_len++;
map.put(str.charAt(i), i);
}
else
{
int index=map.get(str.charAt(i));
if(i-index>cur_len)
{
cur_len++;
}
else
{
cur_len=i-index;
}
map.put(str.charAt(i), i);
}
if(max_len<cur_len)
{
max_len=cur_len;
max_index=i-cur_len+1;
}
}
return str.substring(max_index,max_index+max_len);
}
public static void main(String[] args) {
String str=new String("arabcacfrk");
System.out.println(new MostLongStr().count(str));
}
}