求最大不重复子串
import java.util.HashMap; import java.util.Scanner; public class Sort { public static void main(String[] args){ Scanner in = new Scanner(System.in); String str = in.next(); System.out.println(LongestString(str)); } public static String LongestString(String s) throws NullPointerException{ int start=0;//当前子串开始位置 int len=0;//当前子串长度 int mstart=0;//最大子串开始位置 int mlen=0;//最大子串长度 HashMap<Character,Integer> map=new HashMap<Character,Integer>(); for(int i=0;i<s.length();i++){ if(!map.containsKey(s.charAt(i))) {//如果没出现该字符 map.put(s.charAt(i), 1);//标志出现 len++; } else{//如果出现过,说明找到一个子串 if(len>mlen) { mstart = start;//更新最大子串 mlen=len; } while(s.charAt(start)!=s.charAt(i)){//查找新的开始 map.remove(s.charAt(start));//去掉非新子串元素 start++; len--; } start++; } } if(len>mlen) {//循环结束,判断最后子串 mstart = start; mlen=len; } return s.substring(mstart,mstart+mlen); } }