Find longest substring without repeating characters

前端 未结 30 2549
轻奢々
轻奢々 2020-12-12 18:07

Given a string S of length N find longest substring without repeating characters.

Example:

Input:

30条回答
  •  青春惊慌失措
    2020-12-12 18:44

    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.LinkedHashSet;
    import java.util.List;
    import java.util.Set;
    import java.util.TreeMap;
    
    public class LongestSubString2 {
    
        public static void main(String[] args) {
            String input = "stackoverflowabcdefghijklmn";
            List allOutPuts = new ArrayList();
            TreeMap map = new TreeMap();
            for (int k = 0; k < input.length(); k++) {
                String input1 = input.substring(k);
                String longestSubString = getLongestSubString(input1);
                allOutPuts.add(longestSubString);
            }
    
            for (String str : allOutPuts) {
                int strLen = str.length();
                if (map.containsKey(strLen)) {
                    Set set2 = (HashSet) map.get(strLen);
                    set2.add(str);
                    map.put(strLen, set2);
                } else {
                    Set set1 = new HashSet();
                    set1.add(str);
                    map.put(strLen, set1);
                }
    
            }
            System.out.println(map.lastKey());
            System.out.println(map.get(map.lastKey()));
        }
    
        private static void printArray(Object[] currentObjArr) {
            for (Object obj : currentObjArr) {
                char str = (char) obj;
                System.out.println(str);
            }
    
        }
    
        private static String getLongestSubString(String input) {
    
            Set set = new LinkedHashSet();
            String longestString = "";
            int len = input.length();
            for (int i = 0; i < len; i++) {
                char currentChar = input.charAt(i);
                boolean isCharAdded = set.add(currentChar);
                if (isCharAdded) {
                    if (i == len - 1) {
                        String currentStr = getStringFromSet(set);
    
                        if (currentStr.length() > longestString.length()) {
                            longestString = currentStr;
                        }
                    }
                    continue;
                } else {
                    String currentStr = getStringFromSet(set);
    
                    if (currentStr.length() > longestString.length()) {
                        longestString = currentStr;
                    }
                    set = new LinkedHashSet(input.charAt(i));
                }
    
            }
    
            return longestString;
        }
    
        private static String getStringFromSet(Set set) {
    
            Object[] charArr = set.toArray();
    
            StringBuffer strBuff = new StringBuffer();
            for (Object obj : charArr) {
                strBuff.append(obj);
    
            }
    
            return strBuff.toString();
        }
    }
    

提交回复
热议问题