Find longest substring without repeating characters











up vote
20
down vote

favorite
17












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



Example:



Input: "stackoverflow"



Output: "stackoverfl"



If there are two such candidates, return first from left. I need linear time and constant space algorithm.










share|improve this question




















  • 3




    Which part are you having difficulty with ? Is there some reason why you can't just use a "brute force" approach ?
    – Paul R
    Mar 16 '12 at 9:16








  • 1




    @Paul: I know brute-force solution, TC: O(n^2). I need linear time algorithm.
    – Rajendra Uppal
    Mar 16 '12 at 9:18












  • @downvoter: care to explain?
    – Rajendra Uppal
    Mar 16 '12 at 9:20






  • 1




    If you need O(n) then this should be stated in the question
    – Paul R
    Mar 16 '12 at 10:27






  • 1




    @RajendraUppal: I'm only guessing, but the downvoter probably thought the question "does not show any research effort"... which is not a entirely unreasonable assessment...
    – Jean-François Corbett
    Mar 18 '12 at 18:58















up vote
20
down vote

favorite
17












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



Example:



Input: "stackoverflow"



Output: "stackoverfl"



If there are two such candidates, return first from left. I need linear time and constant space algorithm.










share|improve this question




















  • 3




    Which part are you having difficulty with ? Is there some reason why you can't just use a "brute force" approach ?
    – Paul R
    Mar 16 '12 at 9:16








  • 1




    @Paul: I know brute-force solution, TC: O(n^2). I need linear time algorithm.
    – Rajendra Uppal
    Mar 16 '12 at 9:18












  • @downvoter: care to explain?
    – Rajendra Uppal
    Mar 16 '12 at 9:20






  • 1




    If you need O(n) then this should be stated in the question
    – Paul R
    Mar 16 '12 at 10:27






  • 1




    @RajendraUppal: I'm only guessing, but the downvoter probably thought the question "does not show any research effort"... which is not a entirely unreasonable assessment...
    – Jean-François Corbett
    Mar 18 '12 at 18:58













up vote
20
down vote

favorite
17









up vote
20
down vote

favorite
17






17





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



Example:



Input: "stackoverflow"



Output: "stackoverfl"



If there are two such candidates, return first from left. I need linear time and constant space algorithm.










share|improve this question















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



Example:



Input: "stackoverflow"



Output: "stackoverfl"



If there are two such candidates, return first from left. I need linear time and constant space algorithm.







string algorithm






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 16 '12 at 11:20

























asked Mar 16 '12 at 9:11









Rajendra Uppal

7,558104856




7,558104856








  • 3




    Which part are you having difficulty with ? Is there some reason why you can't just use a "brute force" approach ?
    – Paul R
    Mar 16 '12 at 9:16








  • 1




    @Paul: I know brute-force solution, TC: O(n^2). I need linear time algorithm.
    – Rajendra Uppal
    Mar 16 '12 at 9:18












  • @downvoter: care to explain?
    – Rajendra Uppal
    Mar 16 '12 at 9:20






  • 1




    If you need O(n) then this should be stated in the question
    – Paul R
    Mar 16 '12 at 10:27






  • 1




    @RajendraUppal: I'm only guessing, but the downvoter probably thought the question "does not show any research effort"... which is not a entirely unreasonable assessment...
    – Jean-François Corbett
    Mar 18 '12 at 18:58














  • 3




    Which part are you having difficulty with ? Is there some reason why you can't just use a "brute force" approach ?
    – Paul R
    Mar 16 '12 at 9:16








  • 1




    @Paul: I know brute-force solution, TC: O(n^2). I need linear time algorithm.
    – Rajendra Uppal
    Mar 16 '12 at 9:18












  • @downvoter: care to explain?
    – Rajendra Uppal
    Mar 16 '12 at 9:20






  • 1




    If you need O(n) then this should be stated in the question
    – Paul R
    Mar 16 '12 at 10:27






  • 1




    @RajendraUppal: I'm only guessing, but the downvoter probably thought the question "does not show any research effort"... which is not a entirely unreasonable assessment...
    – Jean-François Corbett
    Mar 18 '12 at 18:58








3




3




Which part are you having difficulty with ? Is there some reason why you can't just use a "brute force" approach ?
– Paul R
Mar 16 '12 at 9:16






Which part are you having difficulty with ? Is there some reason why you can't just use a "brute force" approach ?
– Paul R
Mar 16 '12 at 9:16






1




1




@Paul: I know brute-force solution, TC: O(n^2). I need linear time algorithm.
– Rajendra Uppal
Mar 16 '12 at 9:18






@Paul: I know brute-force solution, TC: O(n^2). I need linear time algorithm.
– Rajendra Uppal
Mar 16 '12 at 9:18














@downvoter: care to explain?
– Rajendra Uppal
Mar 16 '12 at 9:20




@downvoter: care to explain?
– Rajendra Uppal
Mar 16 '12 at 9:20




1




1




If you need O(n) then this should be stated in the question
– Paul R
Mar 16 '12 at 10:27




If you need O(n) then this should be stated in the question
– Paul R
Mar 16 '12 at 10:27




1




1




@RajendraUppal: I'm only guessing, but the downvoter probably thought the question "does not show any research effort"... which is not a entirely unreasonable assessment...
– Jean-François Corbett
Mar 18 '12 at 18:58




@RajendraUppal: I'm only guessing, but the downvoter probably thought the question "does not show any research effort"... which is not a entirely unreasonable assessment...
– Jean-François Corbett
Mar 18 '12 at 18:58












28 Answers
28






active

oldest

votes

















up vote
26
down vote



accepted











  1. You are going to need a start and an end locator(/pointer) for the
    string and an array where you store information for each character:
    did it occour at least once?


  2. Start at the beginning of the string, both locators point to the
    start of the string.


  3. Move the end locator to the right till you find
    a repetition (or reach the end of the string). For each processed character, store it in the array.
    When stopped store the position if this is the largest substring. Also remember the repeated character.


  4. Now do the same thing with the start locator, when processing
    each character, remove its flags from the array. Move the locator till
    you find the earlier occurrence of the repeated character.


  5. Go back to step 3 if you haven't reached the end of string.



Overall: O(N)






share|improve this answer



















  • 2




    This works only for something like ASCII strings. For Unicode strings, change array to hashtable.
    – Evgeny Kluev
    Mar 16 '12 at 9:45










  • @EvgenyKluev There are ~1 million Unicode chars. This is entirely possible to fit into an array indexed by code point.
    – Deestan
    Mar 16 '12 at 10:17






  • 5




    It seems that that algorithm would fail given "ababcdefahijklab" where the correct answer is "bcdefahijkl"
    – kasavbere
    Mar 18 '12 at 19:56






  • 1




    @kasavbere is right. An even simpler counterexample: abadef. Your algorithm returns adef, when it should return badef. Problem is, you're not allowing substrings to overlap.
    – Benubird
    Apr 11 '13 at 8:53






  • 4




    i don't see what is your problem guys... with the example abadef: 3) ab - repeated character found (next is a), stop. 4) move start locator after the repeated character b. 3) move the end locator... badef.
    – Karoly Horvath
    Apr 13 '13 at 19:41




















up vote
6
down vote













import java.util.HashSet;

public class SubString {
public static String subString(String input){

HashSet<Character> set = new HashSet<Character>();

String longestOverAll = "";
String longestTillNow = "";

for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);

if (set.contains(c)) {
longestTillNow = "";
set.clear();
}
longestTillNow += c;
set.add(c);
if (longestTillNow.length() > longestOverAll.length()) {
longestOverAll = longestTillNow;
}
}

return longestOverAll;
}

public static void main(String args) {
String input = "substringfindout";
System.out.println(subString(input));
}
}





share|improve this answer























  • This is the best answer and the best way to do it. Thanks a lot for posting this answer.
    – Kaveesh Kanwal
    Apr 29 '15 at 10:59










  • @KaveeshKanwal I don't think so .. this solution returns only one String as output. What if there are 2 max length sub strings?
    – Amarnath
    Sep 22 '15 at 5:30






  • 4




    Doesn't work. Input : "ninenine" or "lolslols"
    – sr09
    Nov 21 '15 at 20:16










  • It will not return right string because when you find duplicate you should start from the beginning of the last duplicate
    – Rahul
    Apr 9 '17 at 18:28










  • WRONG Solution!
    – JerryGoyal
    May 20 '17 at 10:33


















up vote
5
down vote













You keep an array indicating the position at which a certain character occurred last. For convenience all characters occurred at position -1. You iterate on the string keeping a window, if a character is repeated in that window, you chop off the prefix that ends with the first occurrence of this character. Throughout, you maintain the longest length. Here's a python implementation:



def longest_unique_substr(S):
# This should be replaced by an array (size = alphabet size).
last_occurrence = {}
longest_len_so_far = 0
longest_pos_so_far = 0
curr_starting_pos = 0
curr_length = 0

for k, c in enumerate(S):
l = last_occurrence.get(c, -1)
# If no repetition within window, no problems.
if l < curr_starting_pos:
curr_length += 1
else:
# Check if it is the longest so far
if curr_length > longest_len_so_far:
longest_pos_so_far = curr_starting_pos
longest_len_so_far = curr_length
# Cut the prefix that has repetition
curr_length -= l - curr_starting_pos
curr_starting_pos = l + 1
# In any case, update last_occurrence
last_occurrence[c] = k

# Maybe the longest substring is a suffix
if curr_length > longest_len_so_far:
longest_pos_so_far = curr_starting_pos
longest_len_so_far = curr_length

return S[longest_pos_so_far:longest_pos_so_far + longest_len_so_far]





share|improve this answer





















  • This is in essence very similar to Karoly's solution. This has the advantage of requiring one pass instead of two on each character while his has the advantage of having slightly better space efficiency (his array is 0/1 therefore can be compacted into a bitmask).
    – aelguindy
    Mar 16 '12 at 14:46










  • Very well written. Thanks for the answer.
    – Stealth
    Dec 12 '12 at 4:54


















up vote
2
down vote













EDITED:



following is an implementation of the concesus. It occured to me after my original publication. so as not to delete original, it is presented following:



public static String longestUniqueString(String S) {
int start = 0, end = 0, length = 0;
boolean bits = new boolean[256];
int x = 0, y = 0;
for (; x < S.length() && y < S.length() && length < S.length() - x; x++) {
bits[S.charAt(x)] = true;
for (y++; y < S.length() && !bits[S.charAt(y)]; y++) {
bits[S.charAt(y)] = true;
}
if (length < y - x) {
start = x;
end = y;
length = y - x;
}
while(y<S.length() && x<y && S.charAt(x) != S.charAt(y))
bits[S.charAt(x++)]=false;
}
return S.substring(start, end);
}//


ORIGINAL POST:



Here is my two cents. Test strings included. boolean bits = new boolean[256] may be larger to encompass some larger charset.



public static String longestUniqueString(String S) {
int start=0, end=0, length=0;
boolean bits = new boolean[256];
int x=0, y=0;
for(;x<S.length() && y<S.length() && length < S.length()-x;x++) {
Arrays.fill(bits, false);
bits[S.charAt(x)]=true;
for(y=x+1;y<S.length() && !bits[S.charAt(y)];y++) {
bits[S.charAt(y)]=true;
}
if(length<y-x) {
start=x;
end=y;
length=y-x;
}
}
return S.substring(start,end);
}//

public static void main(String... args) {
String input = { { "" }, { "a" }, { "ab" }, { "aab" }, { "abb" },
{ "aabc" }, { "abbc" }, { "aabbccdefgbc" },
{ "abcdeafghicabcdefghijklmnop" },
{ "abcdeafghicabcdefghijklmnopqrabcdx" },
{ "zxxaabcdeafghicabcdefghijklmnopqrabcdx" },
{"aaabcdefgaaa"}};
for (String a : input) {
System.out.format("%s *** GIVES *** {%s}%n", Arrays.toString(a),
longestUniqueString(a[0]));
}
}





share|improve this answer






























    up vote
    2
    down vote













    Here is one more solution with only 2 string variables:



    public static String getLongestNonRepeatingString(String inputStr){
    if(inputStr == null){
    return null;
    }

    String maxStr = "";
    String tempStr = "";
    for(int i=0; i < inputStr.length(); i++){
    // 1. if tempStr contains new character, then change tempStr
    if(tempStr.contains("" + inputStr.charAt(i))){
    tempStr = tempStr.substring(tempStr.lastIndexOf(inputStr.charAt(i)) + 1);
    }
    // 2. add new character
    tempStr = tempStr + inputStr.charAt(i);
    // 3. replace maxStr with tempStr if tempStr is longer
    if(maxStr.length() < tempStr.length()){
    maxStr = tempStr;
    }
    }

    return maxStr;
    }





    share|improve this answer




























      up vote
      1
      down vote













      Algorithm in JavaScript (w/ lots of comments)..



      /**
      Given a string S find longest substring without repeating characters.
      Example:

      Input: "stackoverflow"
      Output: "stackoverfl"

      Input: "stackoverflowabcdefghijklmn"
      Output: "owabcdefghijklmn"
      */
      function findLongestNonRepeatingSubStr(input) {
      var chars = input.split('');
      var currChar;
      var str = "";
      var longestStr = "";
      var hash = {};
      for (var i = 0; i < chars.length; i++) {
      currChar = chars[i];
      if (!hash[chars[i]]) { // if hash doesn't have the char,
      str += currChar; //add it to str
      hash[chars[i]] = {index:i};//store the index of the char
      } else {// if a duplicate char found..
      //store the current longest non-repeating chars. until now
      //In case of equal-length, <= right-most str, < will result in left most str
      if(longestStr.length <= str.length) {
      longestStr = str;
      }
      //Get the previous duplicate char's index
      var prevDupeIndex = hash[currChar].index;

      //Find all the chars AFTER previous duplicate char and current one
      var strFromPrevDupe = input.substring(prevDupeIndex + 1, i);
      //*NEW* longest string will be chars AFTER prevDupe till current char
      str = strFromPrevDupe + currChar;
      //console.log(str);
      //Also, Reset hash to letters AFTER duplicate letter till current char
      hash = {};
      for (var j = prevDupeIndex + 1; j <= i; j++) {
      hash[input.charAt(j)] = {index:j};
      }
      }
      }
      return longestStr.length > str.length ? longestStr : str;
      }

      //console.log("stackoverflow => " + findLongestNonRepeatingSubStr("stackoverflow"));
      //returns stackoverfl

      //console.log("stackoverflowabcdefghijklmn => " +
      findLongestNonRepeatingSubStr("stackoverflowabcdefghijklmn")); //returns owabcdefghijklmn

      //console.log("1230123450101 => " + findLongestNonRepeatingSubStr("1230123450101")); //
      returns 234501





      share|improve this answer




























        up vote
        1
        down vote














        We can consider all substrings one by one and check for each substring whether it contains all unique characters or not.
        There will be n*(n+1)/2 substrings. Whether a substirng contains all unique characters or not can be checked in linear time by
        scanning it from left to right and keeping a map of visited characters. Time complexity of this solution would be O(n^3).`







        import java.util.ArrayList;
        import java.util.Collections;
        import java.util.HashMap;
        import java.util.LinkedHashSet;
        import java.util.List;
        import java.util.Map;
        import java.util.Set;


        public class LengthOfLongestSubstringWithOutRepeatingChar {
        public static void main(String args)
        {
        String s="stackoverflow";
        //allSubString(s);
        System.out.println("result of find"+find(s));
        }
        public static String find(String s)
        {
        List<String> allSubsring=allSubString(s);
        Set<String> main =new LinkedHashSet<String>();
        for(String temp:allSubsring)
        {
        boolean a = false;
        for(int i=0;i<temp.length();i++)
        {
        for(int k=temp.length()-1;k>i;k--)
        {
        if(temp.charAt(k)==temp.charAt(i))
        a=true;
        }
        }
        if(!a)
        {
        main.add(temp);
        }
        }
        /*for(String x:main)
        {
        System.out.println(x);
        }*/
        String res=null;
        int min=0,max=s.length();
        for(String temp:main)
        {
        if(temp.length()>min&&temp.length()<max)
        {
        min=temp.length();
        res=temp;
        }
        }
        System.out.println(min+"ha ha ha"+res+"he he he");
        return res;

        }
        //substrings left to right ban rahi hai

        private static List<String> allSubString(String str) {
        List<String> all=new ArrayList<String>();
        int c=0;
        for (int i = 0; i < str.length(); i++) {
        for (int j = 0; j <= i; j++) {
        if (!all.contains(str.substring(j, i + 1)))
        {
        c++;
        all.add(str.substring(j, i + 1));
        }
        }
        }
        for(String temp:all)
        {
        System.out.println("substring :-"+temp);
        }
        System.out.println("count"+c);
        return all;
        }
        }








        share|improve this answer




























          up vote
          1
          down vote













          enter image description here
          simple python snippet
          l=length p=position
          maxl=maxlength maxp=maxposition






          share|improve this answer






























            up vote
            0
            down vote













            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<String> allOutPuts = new ArrayList<String>();
            TreeMap<Integer, Set> map = new TreeMap<Integer, Set>();
            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<Character> set = new LinkedHashSet<Character>();
            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<Character>(input.charAt(i));
            }

            }

            return longestString;
            }

            private static String getStringFromSet(Set<Character> set) {

            Object charArr = set.toArray();

            StringBuffer strBuff = new StringBuffer();
            for (Object obj : charArr) {
            strBuff.append(obj);

            }

            return strBuff.toString();
            }
            }





            share|improve this answer

















            • 1




              It does not hurt to add an explanation to the code.
              – Tunaki
              Feb 23 '15 at 22:42


















            up vote
            0
            down vote













            This is my solution, and it was accepted by leetcode. However, after I saw the stats, I saw whole lot solutions has much faster result....meaning, my solution is around 600ms for all their test cases, and most of the js solutions are around 200 -300 ms bracket.. who can tell me why my solution is slowwww??






            var lengthOfLongestSubstring = function(s) {
            var arr = s.split("");

            if (s.length === 0 || s.length === 1) {
            return s.length;
            }

            var head = 0,
            tail = 1;
            var str = arr[head];
            var maxL = 0;
            while (tail < arr.length) {
            if (str.indexOf(arr[tail]) == -1) {
            str += arr[tail];
            maxL = Math.max(maxL, str.length);
            tail++;
            } else {
            maxL = Math.max(maxL, str.length);
            head = head + str.indexOf(arr[tail]) + 1;
            str = arr[head];
            tail = head + 1;
            }
            }
            return maxL;
            };








            share|improve this answer




























              up vote
              0
              down vote













              I am posting O(n^2) in python . I just want to know whether the technique mentioned by Karoly Horvath has any steps that are similar to existing search/sort algorithms ?



              My code :



              def main():
              test='stackoverflow'
              tempstr=''
              maxlen,index=0,0
              indexsubstring=''
              print 'Original string is =%snn' %test

              while(index!=len(test)):
              for char in test[index:]:
              if char not in tempstr:
              tempstr+=char
              if len(tempstr)> len(indexsubstring):
              indexsubstring=tempstr
              elif (len(tempstr)>=maxlen):
              maxlen=len(tempstr)
              indexsubstring=tempstr
              break
              tempstr=''
              print 'max substring length till iteration with starting index =%s is %s'%(test[index],indexsubstring)
              index+=1

              if __name__=='__main__':
              main()





              share|improve this answer




























                up vote
                0
                down vote













                Simple and Easy



                import java.util.Scanner;

                public class longestsub {

                static Scanner sn = new Scanner(System.in);
                static String word = sn.nextLine();

                public static void main(String args) {
                System.out.println("The Length is " +check(word));
                }
                private static int check(String word) {
                String store="";
                for (int i = 0; i < word.length(); i++) {
                if (store.indexOf(word.charAt(i))<0) {
                store = store+word.charAt(i);
                }
                }
                System.out.println("Result word " +store);
                return store.length();
                }

                }





                share|improve this answer




























                  up vote
                  0
                  down vote













                  Not quite optimized but simple answer in Python



                  def lengthOfLongestSubstring(s):
                  temp,maxlen,newstart = {},0,0
                  for i,x in enumerate(s):
                  if x in temp:
                  newstart = max(newstart,s[:i].rfind(x)+1)
                  else:
                  temp[x] = 1
                  maxlen = max(maxlen, len(s[newstart:i + 1]))
                  return maxlen


                  I think the costly affair is rfind which is why it's not quite optimized.






                  share|improve this answer




























                    up vote
                    0
                    down vote













                    Tested and working. For easy understanding, I suppose there's a drawer to put the letters.



                    public int lengthOfLongestSubstring(String s) {
                    int maxlen = 0;
                    int start = 0;
                    int end = 0;
                    HashSet<Character> drawer = new HashSet<Character>();
                    for (int i=0; i<s.length(); i++) {
                    char ch = s.charAt(i);
                    if (drawer.contains(ch)) {
                    //search for ch between start and end
                    while (s.charAt(start)!=ch) {
                    //drop letter from drawer
                    drawer.remove(s.charAt(start));
                    start++;
                    }
                    //Do not remove from drawer actual char (it's the new recently found)
                    start++;
                    end++;
                    }
                    else {
                    drawer.add(ch);
                    end++;
                    int _maxlen = end-start;
                    if (_maxlen>maxlen) {
                    maxlen=_maxlen;
                    }
                    }
                    }
                    return maxlen;
                    }





                    share|improve this answer




























                      up vote
                      0
                      down vote













                      Another O(n) JavaScript solution. It does not alter strings during the looping; it just keeps track of the offset and length of the longest sub string so far:






                      function longest(str) {
                      var hash = {}, start, end, bestStart, best;
                      start = end = bestStart = best = 0;
                      while (end < str.length) {
                      while (hash[str[end]]) hash[str[start++]] = 0;
                      hash[str[end]] = 1;
                      if (++end - start > best) bestStart = start, best = end - start;
                      }
                      return str.substr(bestStart, best);
                      }

                      // I/O for snippet
                      document.querySelector('input').addEventListener('input', function () {
                      document.querySelector('span').textContent = longest(this.value);
                      });

                      Enter word:<input><br>
                      Longest: <span></span>








                      share|improve this answer




























                        up vote
                        0
                        down vote













                        This is my solution. Hope it helps.



                          function longestSubstringWithoutDuplication(str) {
                        var max = 0;

                        //if empty string
                        if (str.length === 0){
                        return 0;
                        } else if (str.length === 1){ //case if the string's length is 1
                        return 1;
                        }

                        //loop over all the chars in the strings
                        var currentChar,
                        map = {},
                        counter = 0; //count the number of char in each substring without duplications
                        for (var i=0; i< str.length ; i++){
                        currentChar = str.charAt(i);

                        //if the current char is not in the map
                        if (map[currentChar] == undefined){
                        //push the currentChar to the map
                        map[currentChar] = i;
                        if (Object.keys(map).length > max){
                        max = Object.keys(map).length;
                        }
                        } else { //there is duplacation
                        //update the max
                        if (Object.keys(map).length > max){
                        max = Object.keys(map).length;
                        }
                        counter = 0; //initilize the counter to count next substring
                        i = map[currentChar]; //start from the duplicated char
                        map = {}; // clean the map
                        }
                        }


                        return max;
                        }





                        share|improve this answer





















                        • Care to elaborate on how this solves the OP's problem?
                          – RamenChef
                          Nov 9 '16 at 18:12


















                        up vote
                        0
                        down vote













                        here is my javascript and cpp implementations with great details: https://algorithm.pingzhang.io/String/longest_substring_without_repeating_characters.html



                        We want to find the longest substring without repeating characters. The first thing comes to my mind is that we need a hash table to store every character in a substring so that when a new character comes in, we can easily know whether this character is already in the substring or not. I call it as valueIdxHash. Then, a substring has a startIdx and endIdx. So we need a variable to keep track of the starting index of a substring and I call it as startIdx. Let's assume we are at index i and we already have a substring (startIdx, i - 1). Now, we want to check whether this substring can keep growing or not.



                        If the valueIdxHash contains str[i], it means it is a repeated character. But we still need to check whether this repeated character is in the substring (startIdx, i - 1). So we need to retrieve the index of str[i] that is appeared last time and then compare this index with startIdx.




                        • If startIdx is larger, it means the last appeared str[i] is outside of the substring. Thus the subtring can keep growing.

                        • If startIdx is smaller, it means the last appeared str[i] is within of the substring. Thus, the substring cannot grow any more. startIdx will be updated as valueIdxHash[str[i]] + 1 and the new substring (valueIdxHash[str[i]] + 1, i) has potential to keep growing.


                        If the valueIdxHash does not contain str[i], the substring can keep growing.






                        share|improve this answer




























                          up vote
                          0
                          down vote













                          I modified my solution to "find the length of the longest substring without repeating characters".



                                  public string LengthOfLongestSubstring(string s) {
                          var res = 0;
                          var dict = new Dictionary<char, int>();
                          var start = 0;

                          for(int i =0; i< s.Length; i++)
                          {
                          if(dict.ContainsKey(s[i]))
                          {
                          start = Math.Max(start, dict[s[i]] + 1); //update start index
                          dict[s[i]] = i;
                          }
                          else
                          {
                          dict.Add(s[i], i);
                          }

                          res = Math.Max(res, i - start + 1); //track max length
                          }
                          return s.Substring(start,res);
                          }





                          share|improve this answer




























                            up vote
                            0
                            down vote















                            import java.util.HashMap;
                            import java.util.HashSet;

                            public class SubString {
                            public static String subString(String input) {

                            String longesTillNOw = "";

                            String longestOverAll = "";
                            HashMap<Character,Integer> chars = new HashMap<>();
                            char array=input.toCharArray();
                            int start=0;
                            for (int i = 0; i < array.length; i++) {
                            char charactor = array[i];
                            if (chars.containsKey(charactor) ) {
                            start=chars.get(charactor)+1;
                            i=start;
                            chars.clear();
                            longesTillNOw = "";
                            } else {
                            chars.put(charactor,i);
                            longesTillNOw = longesTillNOw + charactor;
                            if (longesTillNOw.length() > longestOverAll.length()) {
                            longestOverAll = longesTillNOw;
                            }
                            }
                            }
                            return longestOverAll;

                            }

                            public static void main(String args) {
                            String input = "stackoverflowabcdefghijklmn";
                            System.out.println(subString(input));
                            }
                            }





                            share|improve this answer






























                              up vote
                              0
                              down vote













                              Here are two ways to approach this problem in JavaScript.



                              A Brute Force approach is to loop through the string twice, checking every substring against every other substring and finding the maximum length where the substring is unique. We'll need two functions: one to check if a substring is unique and a second function to perform our double loop.



                              // O(n) time
                              const allUnique = str => {
                              const set = [...new Set(str)];
                              return (set.length == str.length) ? true: false;
                              }

                              // O(n^3) time, O(k) size where k is the size of the set
                              const lengthOfLongestSubstring = str => {
                              let result = 0,
                              maxResult = 0;
                              for (let i=0; i<str.length-1; i++) {
                              for (let j=i+1; j<str.length; j++) {
                              if (allUnique(str.substring(i, j))) {
                              result = str.substring(i, j).length;
                              if (result > maxResult) {
                              maxResult = result;
                              }
                              }
                              }
                              return maxResult;
                              }
                              }


                              This has a time complexity of O(n^3) since we perform a double loop O(n^2) and then another loop on top of that O(n) for our unique function. The space is the size of our set which can be generalized to O(n) or more accurately O(k) where k is the size of the set.



                              A Greedy Approach is to loop through only once and keep track of the maximum unique substring length as we go. We can use either an array or a hash map, but I think the new .includes() array method is cool, so let's use that.



                              const lengthOfLongestSubstring = str => {
                              let result = ,
                              maxResult = 0;

                              for (let i=0; i<str.length; i++) {
                              if (!result.includes(str[i])) {
                              result.push(str[i]);
                              } else {
                              maxResult = i;
                              }
                              }

                              return maxResult;
                              }


                              This has a time complexity of O(n) and a space complexity of O(1).






                              share|improve this answer




























                                up vote
                                0
                                down vote













                                This problem can be solved in O(n) time complexity.
                                Initialize three variables




                                1. Start (index pointing to the start of the non repeating substring, Initialize it as 0 ).

                                2. End (index pointing to the end of the non repeating substring, Initialize it as 0 )

                                3. Hasmap (Object containing the last visited index positions of characters. Ex : {'a':0, 'b':1} for string "ab")


                                Steps :
                                Iterate over the string and perform following actions.




                                1. If the current character is not present in hashmap (), add it as to
                                  hashmap, character as key and its index as value.


                                2. If current character is present in hashmap, then



                                  a) Check whether the start index is less than or equal to the value present in the hashmap against the character (last index of same character earlier visited),



                                  b) it is less then assign start variables value as the hashmaps' value + 1 (last index of same character earlier visited + 1);



                                  c) Update hashmap by overriding the hashmap's current character's value as current index of character.



                                  d) Calculate the end-start as the longest substring value and update if it's greater than earlier longest non-repeating substring.




                                Following is the Javascript Solution for this problem.



                                var lengthOfLongestSubstring = function(s) {
                                let length = s.length;
                                let ans = 0;
                                let start = 0,
                                end = 0;
                                let hashMap = {};

                                for (var i = 0; i < length; i++) {

                                if (!hashMap.hasOwnProperty(s[i])) {
                                hashMap[s[i]] = i;
                                } else {
                                if (start <= hashMap[s[i]]) {
                                start = hashMap[s[i]] + 1;
                                }
                                hashMap[s[i]] = i;
                                }
                                end++;
                                ans = ans > (end - start) ? ans : (end - start);
                                }
                                return ans;
                                };





                                share|improve this answer




























                                  up vote
                                  0
                                  down vote













                                  Question: Find the longest substring without repeating characters.
                                  Example 1 :



                                      import java.util.LinkedHashMap;
                                  import java.util.Map;

                                  public class example1 {

                                  public static void main(String args) {
                                  String a = "abcabcbb";
                                  // output => 3
                                  System.out.println( lengthOfLongestSubstring(a));

                                  }

                                  private static int lengthOfLongestSubstring(String a) {
                                  if(a == null || a.length() == 0) {return 0 ;}
                                  int res = 0 ;
                                  Map<Character , Integer> map = new LinkedHashMap<>();
                                  for (int i = 0; i < a.length(); i++) {
                                  char ch = a.charAt(i);
                                  if (!map.containsKey(ch)) {
                                  //If ch is not present in map, adding ch into map along with its position
                                  map.put(ch, i);

                                  }else {
                                  /*
                                  If char ch is present in Map, reposition the cursor i to the position of ch and clear the Map.
                                  */
                                  i = map.put(ch, i);// updation of index
                                  map.clear();
                                  }//else

                                  res = Math.max(res, map.size());

                                  }



                                  return res;
                                  }

                                  }


                                  if you want the longest string without the repeating characters as output then do this inside the for loop:



                                  String res ="";// global
                                  int len = 0 ;//global
                                  if(len < map.size()) {
                                  len = map.size();
                                  res = map.keySet().toString();
                                  }
                                  System.out.println("len -> " + len);
                                  System.out.println("res => " + res);





                                  share|improve this answer























                                  • Thank you for this code snippet, which might provide some limited short-term help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem, and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you've made.
                                    – Toby Speight
                                    Apr 3 at 17:42


















                                  up vote
                                  0
                                  down vote













                                  def max_substring(string):
                                  last_substring = ''
                                  max_substring = ''
                                  for x in string:
                                  k = find_index(x,last_substring)
                                  last_substring = last_substring[(k+1):]+x
                                  if len(last_substring) > len(max_substring):
                                  max_substring = last_substring
                                  return max_substring

                                  def find_index(x, lst):
                                  k = 0
                                  while k <len(lst):
                                  if lst[k] == x:
                                  return k
                                  k +=1
                                  return -1





                                  share|improve this answer




























                                    up vote
                                    0
                                    down vote













                                    can we use something like this .



                                    def longestpalindrome(str1):
                                    arr1=list(str1)
                                    s=set(arr1)
                                    arr2=list(s)
                                    return len(arr2)



                                    str1='abadef'
                                    a=longestpalindrome(str1)
                                    print(a)


                                    if only length of the substring is to be returned






                                    share|improve this answer




























                                      up vote
                                      0
                                      down vote













                                      Algorithm:
                                      1) Initialise an empty dictionary dct to check if any character already exists in the string.
                                      2) cnt - to keep the count of substring without repeating characters.
                                      3)l and r are the two pointers initialised to first index of the string.
                                      4)loop through each char of the string.
                                      5) If the character not present in the dct add itand increse the cnt.
                                      6)If its already present then check if cnt is greater then resStrLen.
                                      7)Remove the char from dct and shift the left pointer by 1 and decrease the count.
                                      8)Repeat 5,6,7 till l,r greater or equal to length of the input string.
                                      9)Have one more check at the end to handle cases like input string with non-repeating characters.

                                      Here is the simple python program to Find longest substring without repeating characters




                                      a="stackoverflow"
                                      strLength = len(a)
                                      dct={}
                                      resStrLen=0
                                      cnt=0
                                      l=0
                                      r=0
                                      strb=l
                                      stre=l
                                      while(l<strLength and r<strLength):
                                      if a[l] in dct:
                                      if cnt>resStrLen:
                                      resStrLen=cnt
                                      strb=r
                                      stre=l
                                      dct.pop(a[r])
                                      cnt=cnt-1
                                      r+=1
                                      else:
                                      cnt+=1
                                      dct[a[l]]=1
                                      l+=1

                                      if cnt>resStrLen:
                                      resStrLen=cnt
                                      strb=r
                                      stre=l

                                      print "Result String Length : "+str(resStrLen)
                                      print "Result String : " + a[strb:stre]









                                      share|improve this answer




























                                        up vote
                                        0
                                        down vote













                                        The solution in C.



                                        #include<stdio.h>
                                        #include <string.h>

                                        void longstr(char* a, int *start, int *last)
                                        {
                                        *start = *last = 0;
                                        int visited[256];
                                        for (int i = 0; i < 256; i++)
                                        {
                                        visited[i] = -1;
                                        }
                                        int max_len = 0;
                                        int cur_len = 0;
                                        int prev_index;
                                        visited[a[0]] = 0;
                                        for (int i = 1; i < strlen(a); i++)
                                        {
                                        prev_index = visited[a[i]];
                                        if (prev_index == -1 || i - cur_len > prev_index)
                                        {
                                        cur_len++;
                                        *last = i;
                                        }
                                        else
                                        {
                                        if (max_len < cur_len)
                                        {
                                        *start = *last - cur_len;
                                        max_len = cur_len;
                                        }
                                        cur_len = i - prev_index;
                                        }
                                        visited[a[i]] = i;
                                        }
                                        if (max_len < cur_len)
                                        {
                                        *start = *last - cur_len;
                                        max_len = cur_len;
                                        }
                                        }

                                        int main()
                                        {
                                        char str = "ABDEFGABEF";
                                        printf("The input string is %s n", str);
                                        int start, last;
                                        longstr(str, &start, &last);
                                        //printf("n %d %d n", start, last);
                                        memmove(str, (str + start), last - start);
                                        str[last] = '';
                                        printf("the longest non-repeating character substring is %s", str);
                                        return 0;
                                        }





                                        share|improve this answer




























                                          up vote
                                          -1
                                          down vote













                                          private static string LongestSubstring(string word)
                                          {
                                          var set = new HashSet<char>();
                                          string longestOverAll = "";
                                          string longestTillNow = "";

                                          foreach (char c in word)
                                          {
                                          if (!set.Contains(c))
                                          {
                                          longestTillNow += c;
                                          set.Add(c);
                                          }
                                          else
                                          {
                                          longestTillNow = string.Empty;
                                          }

                                          if (longestTillNow.Length > longestOverAll.Length)
                                          {
                                          longestOverAll = longestTillNow;
                                          }
                                          }

                                          return longestOverAll;
                                          }





                                          share|improve this answer




























                                            up vote
                                            -1
                                            down vote













                                            private static String LongestSubString(String word)
                                            {
                                            char charArray = word.toCharArray();
                                            HashSet set = new HashSet();
                                            String longestOverAll = "";
                                            String longestTillNow = "";
                                            for (int i = 0; i < charArray.length; i++) {
                                            Character c = charArray[i];

                                            if (set.contains(c)) {
                                            longestTillNow = "";
                                            set.clear();
                                            }
                                            longestTillNow += c;
                                            set.add(c);
                                            if (longestTillNow.length() > longestOverAll.length())
                                            {
                                            longestOverAll = longestTillNow;

                                            }
                                            }

                                            return longestOverAll;
                                            }





                                            share|improve this answer

















                                            • 1




                                              Why are you simply posting the same answer again? Just for the sake of reputations?
                                              – Kaveesh Kanwal
                                              Apr 29 '15 at 10:58










                                            protected by Community Apr 19 '17 at 11:33



                                            Thank you for your interest in this question.
                                            Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                                            Would you like to answer one of these unanswered questions instead?














                                            28 Answers
                                            28






                                            active

                                            oldest

                                            votes








                                            28 Answers
                                            28






                                            active

                                            oldest

                                            votes









                                            active

                                            oldest

                                            votes






                                            active

                                            oldest

                                            votes








                                            up vote
                                            26
                                            down vote



                                            accepted











                                            1. You are going to need a start and an end locator(/pointer) for the
                                              string and an array where you store information for each character:
                                              did it occour at least once?


                                            2. Start at the beginning of the string, both locators point to the
                                              start of the string.


                                            3. Move the end locator to the right till you find
                                              a repetition (or reach the end of the string). For each processed character, store it in the array.
                                              When stopped store the position if this is the largest substring. Also remember the repeated character.


                                            4. Now do the same thing with the start locator, when processing
                                              each character, remove its flags from the array. Move the locator till
                                              you find the earlier occurrence of the repeated character.


                                            5. Go back to step 3 if you haven't reached the end of string.



                                            Overall: O(N)






                                            share|improve this answer



















                                            • 2




                                              This works only for something like ASCII strings. For Unicode strings, change array to hashtable.
                                              – Evgeny Kluev
                                              Mar 16 '12 at 9:45










                                            • @EvgenyKluev There are ~1 million Unicode chars. This is entirely possible to fit into an array indexed by code point.
                                              – Deestan
                                              Mar 16 '12 at 10:17






                                            • 5




                                              It seems that that algorithm would fail given "ababcdefahijklab" where the correct answer is "bcdefahijkl"
                                              – kasavbere
                                              Mar 18 '12 at 19:56






                                            • 1




                                              @kasavbere is right. An even simpler counterexample: abadef. Your algorithm returns adef, when it should return badef. Problem is, you're not allowing substrings to overlap.
                                              – Benubird
                                              Apr 11 '13 at 8:53






                                            • 4




                                              i don't see what is your problem guys... with the example abadef: 3) ab - repeated character found (next is a), stop. 4) move start locator after the repeated character b. 3) move the end locator... badef.
                                              – Karoly Horvath
                                              Apr 13 '13 at 19:41

















                                            up vote
                                            26
                                            down vote



                                            accepted











                                            1. You are going to need a start and an end locator(/pointer) for the
                                              string and an array where you store information for each character:
                                              did it occour at least once?


                                            2. Start at the beginning of the string, both locators point to the
                                              start of the string.


                                            3. Move the end locator to the right till you find
                                              a repetition (or reach the end of the string). For each processed character, store it in the array.
                                              When stopped store the position if this is the largest substring. Also remember the repeated character.


                                            4. Now do the same thing with the start locator, when processing
                                              each character, remove its flags from the array. Move the locator till
                                              you find the earlier occurrence of the repeated character.


                                            5. Go back to step 3 if you haven't reached the end of string.



                                            Overall: O(N)






                                            share|improve this answer



















                                            • 2




                                              This works only for something like ASCII strings. For Unicode strings, change array to hashtable.
                                              – Evgeny Kluev
                                              Mar 16 '12 at 9:45










                                            • @EvgenyKluev There are ~1 million Unicode chars. This is entirely possible to fit into an array indexed by code point.
                                              – Deestan
                                              Mar 16 '12 at 10:17






                                            • 5




                                              It seems that that algorithm would fail given "ababcdefahijklab" where the correct answer is "bcdefahijkl"
                                              – kasavbere
                                              Mar 18 '12 at 19:56






                                            • 1




                                              @kasavbere is right. An even simpler counterexample: abadef. Your algorithm returns adef, when it should return badef. Problem is, you're not allowing substrings to overlap.
                                              – Benubird
                                              Apr 11 '13 at 8:53






                                            • 4




                                              i don't see what is your problem guys... with the example abadef: 3) ab - repeated character found (next is a), stop. 4) move start locator after the repeated character b. 3) move the end locator... badef.
                                              – Karoly Horvath
                                              Apr 13 '13 at 19:41















                                            up vote
                                            26
                                            down vote



                                            accepted







                                            up vote
                                            26
                                            down vote



                                            accepted







                                            1. You are going to need a start and an end locator(/pointer) for the
                                              string and an array where you store information for each character:
                                              did it occour at least once?


                                            2. Start at the beginning of the string, both locators point to the
                                              start of the string.


                                            3. Move the end locator to the right till you find
                                              a repetition (or reach the end of the string). For each processed character, store it in the array.
                                              When stopped store the position if this is the largest substring. Also remember the repeated character.


                                            4. Now do the same thing with the start locator, when processing
                                              each character, remove its flags from the array. Move the locator till
                                              you find the earlier occurrence of the repeated character.


                                            5. Go back to step 3 if you haven't reached the end of string.



                                            Overall: O(N)






                                            share|improve this answer















                                            1. You are going to need a start and an end locator(/pointer) for the
                                              string and an array where you store information for each character:
                                              did it occour at least once?


                                            2. Start at the beginning of the string, both locators point to the
                                              start of the string.


                                            3. Move the end locator to the right till you find
                                              a repetition (or reach the end of the string). For each processed character, store it in the array.
                                              When stopped store the position if this is the largest substring. Also remember the repeated character.


                                            4. Now do the same thing with the start locator, when processing
                                              each character, remove its flags from the array. Move the locator till
                                              you find the earlier occurrence of the repeated character.


                                            5. Go back to step 3 if you haven't reached the end of string.



                                            Overall: O(N)







                                            share|improve this answer














                                            share|improve this answer



                                            share|improve this answer








                                            edited Jul 1 at 19:12









                                            Mark Amery

                                            58.4k30234275




                                            58.4k30234275










                                            answered Mar 16 '12 at 9:35









                                            Karoly Horvath

                                            77.6k1090155




                                            77.6k1090155








                                            • 2




                                              This works only for something like ASCII strings. For Unicode strings, change array to hashtable.
                                              – Evgeny Kluev
                                              Mar 16 '12 at 9:45










                                            • @EvgenyKluev There are ~1 million Unicode chars. This is entirely possible to fit into an array indexed by code point.
                                              – Deestan
                                              Mar 16 '12 at 10:17






                                            • 5




                                              It seems that that algorithm would fail given "ababcdefahijklab" where the correct answer is "bcdefahijkl"
                                              – kasavbere
                                              Mar 18 '12 at 19:56






                                            • 1




                                              @kasavbere is right. An even simpler counterexample: abadef. Your algorithm returns adef, when it should return badef. Problem is, you're not allowing substrings to overlap.
                                              – Benubird
                                              Apr 11 '13 at 8:53






                                            • 4




                                              i don't see what is your problem guys... with the example abadef: 3) ab - repeated character found (next is a), stop. 4) move start locator after the repeated character b. 3) move the end locator... badef.
                                              – Karoly Horvath
                                              Apr 13 '13 at 19:41
















                                            • 2




                                              This works only for something like ASCII strings. For Unicode strings, change array to hashtable.
                                              – Evgeny Kluev
                                              Mar 16 '12 at 9:45










                                            • @EvgenyKluev There are ~1 million Unicode chars. This is entirely possible to fit into an array indexed by code point.
                                              – Deestan
                                              Mar 16 '12 at 10:17






                                            • 5




                                              It seems that that algorithm would fail given "ababcdefahijklab" where the correct answer is "bcdefahijkl"
                                              – kasavbere
                                              Mar 18 '12 at 19:56






                                            • 1




                                              @kasavbere is right. An even simpler counterexample: abadef. Your algorithm returns adef, when it should return badef. Problem is, you're not allowing substrings to overlap.
                                              – Benubird
                                              Apr 11 '13 at 8:53






                                            • 4




                                              i don't see what is your problem guys... with the example abadef: 3) ab - repeated character found (next is a), stop. 4) move start locator after the repeated character b. 3) move the end locator... badef.
                                              – Karoly Horvath
                                              Apr 13 '13 at 19:41










                                            2




                                            2




                                            This works only for something like ASCII strings. For Unicode strings, change array to hashtable.
                                            – Evgeny Kluev
                                            Mar 16 '12 at 9:45




                                            This works only for something like ASCII strings. For Unicode strings, change array to hashtable.
                                            – Evgeny Kluev
                                            Mar 16 '12 at 9:45












                                            @EvgenyKluev There are ~1 million Unicode chars. This is entirely possible to fit into an array indexed by code point.
                                            – Deestan
                                            Mar 16 '12 at 10:17




                                            @EvgenyKluev There are ~1 million Unicode chars. This is entirely possible to fit into an array indexed by code point.
                                            – Deestan
                                            Mar 16 '12 at 10:17




                                            5




                                            5




                                            It seems that that algorithm would fail given "ababcdefahijklab" where the correct answer is "bcdefahijkl"
                                            – kasavbere
                                            Mar 18 '12 at 19:56




                                            It seems that that algorithm would fail given "ababcdefahijklab" where the correct answer is "bcdefahijkl"
                                            – kasavbere
                                            Mar 18 '12 at 19:56




                                            1




                                            1




                                            @kasavbere is right. An even simpler counterexample: abadef. Your algorithm returns adef, when it should return badef. Problem is, you're not allowing substrings to overlap.
                                            – Benubird
                                            Apr 11 '13 at 8:53




                                            @kasavbere is right. An even simpler counterexample: abadef. Your algorithm returns adef, when it should return badef. Problem is, you're not allowing substrings to overlap.
                                            – Benubird
                                            Apr 11 '13 at 8:53




                                            4




                                            4




                                            i don't see what is your problem guys... with the example abadef: 3) ab - repeated character found (next is a), stop. 4) move start locator after the repeated character b. 3) move the end locator... badef.
                                            – Karoly Horvath
                                            Apr 13 '13 at 19:41






                                            i don't see what is your problem guys... with the example abadef: 3) ab - repeated character found (next is a), stop. 4) move start locator after the repeated character b. 3) move the end locator... badef.
                                            – Karoly Horvath
                                            Apr 13 '13 at 19:41














                                            up vote
                                            6
                                            down vote













                                            import java.util.HashSet;

                                            public class SubString {
                                            public static String subString(String input){

                                            HashSet<Character> set = new HashSet<Character>();

                                            String longestOverAll = "";
                                            String longestTillNow = "";

                                            for (int i = 0; i < input.length(); i++) {
                                            char c = input.charAt(i);

                                            if (set.contains(c)) {
                                            longestTillNow = "";
                                            set.clear();
                                            }
                                            longestTillNow += c;
                                            set.add(c);
                                            if (longestTillNow.length() > longestOverAll.length()) {
                                            longestOverAll = longestTillNow;
                                            }
                                            }

                                            return longestOverAll;
                                            }

                                            public static void main(String args) {
                                            String input = "substringfindout";
                                            System.out.println(subString(input));
                                            }
                                            }





                                            share|improve this answer























                                            • This is the best answer and the best way to do it. Thanks a lot for posting this answer.
                                              – Kaveesh Kanwal
                                              Apr 29 '15 at 10:59










                                            • @KaveeshKanwal I don't think so .. this solution returns only one String as output. What if there are 2 max length sub strings?
                                              – Amarnath
                                              Sep 22 '15 at 5:30






                                            • 4




                                              Doesn't work. Input : "ninenine" or "lolslols"
                                              – sr09
                                              Nov 21 '15 at 20:16










                                            • It will not return right string because when you find duplicate you should start from the beginning of the last duplicate
                                              – Rahul
                                              Apr 9 '17 at 18:28










                                            • WRONG Solution!
                                              – JerryGoyal
                                              May 20 '17 at 10:33















                                            up vote
                                            6
                                            down vote













                                            import java.util.HashSet;

                                            public class SubString {
                                            public static String subString(String input){

                                            HashSet<Character> set = new HashSet<Character>();

                                            String longestOverAll = "";
                                            String longestTillNow = "";

                                            for (int i = 0; i < input.length(); i++) {
                                            char c = input.charAt(i);

                                            if (set.contains(c)) {
                                            longestTillNow = "";
                                            set.clear();
                                            }
                                            longestTillNow += c;
                                            set.add(c);
                                            if (longestTillNow.length() > longestOverAll.length()) {
                                            longestOverAll = longestTillNow;
                                            }
                                            }

                                            return longestOverAll;
                                            }

                                            public static void main(String args) {
                                            String input = "substringfindout";
                                            System.out.println(subString(input));
                                            }
                                            }





                                            share|improve this answer























                                            • This is the best answer and the best way to do it. Thanks a lot for posting this answer.
                                              – Kaveesh Kanwal
                                              Apr 29 '15 at 10:59










                                            • @KaveeshKanwal I don't think so .. this solution returns only one String as output. What if there are 2 max length sub strings?
                                              – Amarnath
                                              Sep 22 '15 at 5:30






                                            • 4




                                              Doesn't work. Input : "ninenine" or "lolslols"
                                              – sr09
                                              Nov 21 '15 at 20:16










                                            • It will not return right string because when you find duplicate you should start from the beginning of the last duplicate
                                              – Rahul
                                              Apr 9 '17 at 18:28










                                            • WRONG Solution!
                                              – JerryGoyal
                                              May 20 '17 at 10:33













                                            up vote
                                            6
                                            down vote










                                            up vote
                                            6
                                            down vote









                                            import java.util.HashSet;

                                            public class SubString {
                                            public static String subString(String input){

                                            HashSet<Character> set = new HashSet<Character>();

                                            String longestOverAll = "";
                                            String longestTillNow = "";

                                            for (int i = 0; i < input.length(); i++) {
                                            char c = input.charAt(i);

                                            if (set.contains(c)) {
                                            longestTillNow = "";
                                            set.clear();
                                            }
                                            longestTillNow += c;
                                            set.add(c);
                                            if (longestTillNow.length() > longestOverAll.length()) {
                                            longestOverAll = longestTillNow;
                                            }
                                            }

                                            return longestOverAll;
                                            }

                                            public static void main(String args) {
                                            String input = "substringfindout";
                                            System.out.println(subString(input));
                                            }
                                            }





                                            share|improve this answer














                                            import java.util.HashSet;

                                            public class SubString {
                                            public static String subString(String input){

                                            HashSet<Character> set = new HashSet<Character>();

                                            String longestOverAll = "";
                                            String longestTillNow = "";

                                            for (int i = 0; i < input.length(); i++) {
                                            char c = input.charAt(i);

                                            if (set.contains(c)) {
                                            longestTillNow = "";
                                            set.clear();
                                            }
                                            longestTillNow += c;
                                            set.add(c);
                                            if (longestTillNow.length() > longestOverAll.length()) {
                                            longestOverAll = longestTillNow;
                                            }
                                            }

                                            return longestOverAll;
                                            }

                                            public static void main(String args) {
                                            String input = "substringfindout";
                                            System.out.println(subString(input));
                                            }
                                            }






                                            share|improve this answer














                                            share|improve this answer



                                            share|improve this answer








                                            edited Apr 27 '15 at 9:56









                                            TZHX

                                            3,693103748




                                            3,693103748










                                            answered Apr 27 '15 at 9:52







                                            user4837130



















                                            • This is the best answer and the best way to do it. Thanks a lot for posting this answer.
                                              – Kaveesh Kanwal
                                              Apr 29 '15 at 10:59










                                            • @KaveeshKanwal I don't think so .. this solution returns only one String as output. What if there are 2 max length sub strings?
                                              – Amarnath
                                              Sep 22 '15 at 5:30






                                            • 4




                                              Doesn't work. Input : "ninenine" or "lolslols"
                                              – sr09
                                              Nov 21 '15 at 20:16










                                            • It will not return right string because when you find duplicate you should start from the beginning of the last duplicate
                                              – Rahul
                                              Apr 9 '17 at 18:28










                                            • WRONG Solution!
                                              – JerryGoyal
                                              May 20 '17 at 10:33


















                                            • This is the best answer and the best way to do it. Thanks a lot for posting this answer.
                                              – Kaveesh Kanwal
                                              Apr 29 '15 at 10:59










                                            • @KaveeshKanwal I don't think so .. this solution returns only one String as output. What if there are 2 max length sub strings?
                                              – Amarnath
                                              Sep 22 '15 at 5:30






                                            • 4




                                              Doesn't work. Input : "ninenine" or "lolslols"
                                              – sr09
                                              Nov 21 '15 at 20:16










                                            • It will not return right string because when you find duplicate you should start from the beginning of the last duplicate
                                              – Rahul
                                              Apr 9 '17 at 18:28










                                            • WRONG Solution!
                                              – JerryGoyal
                                              May 20 '17 at 10:33
















                                            This is the best answer and the best way to do it. Thanks a lot for posting this answer.
                                            – Kaveesh Kanwal
                                            Apr 29 '15 at 10:59




                                            This is the best answer and the best way to do it. Thanks a lot for posting this answer.
                                            – Kaveesh Kanwal
                                            Apr 29 '15 at 10:59












                                            @KaveeshKanwal I don't think so .. this solution returns only one String as output. What if there are 2 max length sub strings?
                                            – Amarnath
                                            Sep 22 '15 at 5:30




                                            @KaveeshKanwal I don't think so .. this solution returns only one String as output. What if there are 2 max length sub strings?
                                            – Amarnath
                                            Sep 22 '15 at 5:30




                                            4




                                            4




                                            Doesn't work. Input : "ninenine" or "lolslols"
                                            – sr09
                                            Nov 21 '15 at 20:16




                                            Doesn't work. Input : "ninenine" or "lolslols"
                                            – sr09
                                            Nov 21 '15 at 20:16












                                            It will not return right string because when you find duplicate you should start from the beginning of the last duplicate
                                            – Rahul
                                            Apr 9 '17 at 18:28




                                            It will not return right string because when you find duplicate you should start from the beginning of the last duplicate
                                            – Rahul
                                            Apr 9 '17 at 18:28












                                            WRONG Solution!
                                            – JerryGoyal
                                            May 20 '17 at 10:33




                                            WRONG Solution!
                                            – JerryGoyal
                                            May 20 '17 at 10:33










                                            up vote
                                            5
                                            down vote













                                            You keep an array indicating the position at which a certain character occurred last. For convenience all characters occurred at position -1. You iterate on the string keeping a window, if a character is repeated in that window, you chop off the prefix that ends with the first occurrence of this character. Throughout, you maintain the longest length. Here's a python implementation:



                                            def longest_unique_substr(S):
                                            # This should be replaced by an array (size = alphabet size).
                                            last_occurrence = {}
                                            longest_len_so_far = 0
                                            longest_pos_so_far = 0
                                            curr_starting_pos = 0
                                            curr_length = 0

                                            for k, c in enumerate(S):
                                            l = last_occurrence.get(c, -1)
                                            # If no repetition within window, no problems.
                                            if l < curr_starting_pos:
                                            curr_length += 1
                                            else:
                                            # Check if it is the longest so far
                                            if curr_length > longest_len_so_far:
                                            longest_pos_so_far = curr_starting_pos
                                            longest_len_so_far = curr_length
                                            # Cut the prefix that has repetition
                                            curr_length -= l - curr_starting_pos
                                            curr_starting_pos = l + 1
                                            # In any case, update last_occurrence
                                            last_occurrence[c] = k

                                            # Maybe the longest substring is a suffix
                                            if curr_length > longest_len_so_far:
                                            longest_pos_so_far = curr_starting_pos
                                            longest_len_so_far = curr_length

                                            return S[longest_pos_so_far:longest_pos_so_far + longest_len_so_far]





                                            share|improve this answer





















                                            • This is in essence very similar to Karoly's solution. This has the advantage of requiring one pass instead of two on each character while his has the advantage of having slightly better space efficiency (his array is 0/1 therefore can be compacted into a bitmask).
                                              – aelguindy
                                              Mar 16 '12 at 14:46










                                            • Very well written. Thanks for the answer.
                                              – Stealth
                                              Dec 12 '12 at 4:54















                                            up vote
                                            5
                                            down vote













                                            You keep an array indicating the position at which a certain character occurred last. For convenience all characters occurred at position -1. You iterate on the string keeping a window, if a character is repeated in that window, you chop off the prefix that ends with the first occurrence of this character. Throughout, you maintain the longest length. Here's a python implementation:



                                            def longest_unique_substr(S):
                                            # This should be replaced by an array (size = alphabet size).
                                            last_occurrence = {}
                                            longest_len_so_far = 0
                                            longest_pos_so_far = 0
                                            curr_starting_pos = 0
                                            curr_length = 0

                                            for k, c in enumerate(S):
                                            l = last_occurrence.get(c, -1)
                                            # If no repetition within window, no problems.
                                            if l < curr_starting_pos:
                                            curr_length += 1
                                            else:
                                            # Check if it is the longest so far
                                            if curr_length > longest_len_so_far:
                                            longest_pos_so_far = curr_starting_pos
                                            longest_len_so_far = curr_length
                                            # Cut the prefix that has repetition
                                            curr_length -= l - curr_starting_pos
                                            curr_starting_pos = l + 1
                                            # In any case, update last_occurrence
                                            last_occurrence[c] = k

                                            # Maybe the longest substring is a suffix
                                            if curr_length > longest_len_so_far:
                                            longest_pos_so_far = curr_starting_pos
                                            longest_len_so_far = curr_length

                                            return S[longest_pos_so_far:longest_pos_so_far + longest_len_so_far]





                                            share|improve this answer





















                                            • This is in essence very similar to Karoly's solution. This has the advantage of requiring one pass instead of two on each character while his has the advantage of having slightly better space efficiency (his array is 0/1 therefore can be compacted into a bitmask).
                                              – aelguindy
                                              Mar 16 '12 at 14:46










                                            • Very well written. Thanks for the answer.
                                              – Stealth
                                              Dec 12 '12 at 4:54













                                            up vote
                                            5
                                            down vote










                                            up vote
                                            5
                                            down vote









                                            You keep an array indicating the position at which a certain character occurred last. For convenience all characters occurred at position -1. You iterate on the string keeping a window, if a character is repeated in that window, you chop off the prefix that ends with the first occurrence of this character. Throughout, you maintain the longest length. Here's a python implementation:



                                            def longest_unique_substr(S):
                                            # This should be replaced by an array (size = alphabet size).
                                            last_occurrence = {}
                                            longest_len_so_far = 0
                                            longest_pos_so_far = 0
                                            curr_starting_pos = 0
                                            curr_length = 0

                                            for k, c in enumerate(S):
                                            l = last_occurrence.get(c, -1)
                                            # If no repetition within window, no problems.
                                            if l < curr_starting_pos:
                                            curr_length += 1
                                            else:
                                            # Check if it is the longest so far
                                            if curr_length > longest_len_so_far:
                                            longest_pos_so_far = curr_starting_pos
                                            longest_len_so_far = curr_length
                                            # Cut the prefix that has repetition
                                            curr_length -= l - curr_starting_pos
                                            curr_starting_pos = l + 1
                                            # In any case, update last_occurrence
                                            last_occurrence[c] = k

                                            # Maybe the longest substring is a suffix
                                            if curr_length > longest_len_so_far:
                                            longest_pos_so_far = curr_starting_pos
                                            longest_len_so_far = curr_length

                                            return S[longest_pos_so_far:longest_pos_so_far + longest_len_so_far]





                                            share|improve this answer












                                            You keep an array indicating the position at which a certain character occurred last. For convenience all characters occurred at position -1. You iterate on the string keeping a window, if a character is repeated in that window, you chop off the prefix that ends with the first occurrence of this character. Throughout, you maintain the longest length. Here's a python implementation:



                                            def longest_unique_substr(S):
                                            # This should be replaced by an array (size = alphabet size).
                                            last_occurrence = {}
                                            longest_len_so_far = 0
                                            longest_pos_so_far = 0
                                            curr_starting_pos = 0
                                            curr_length = 0

                                            for k, c in enumerate(S):
                                            l = last_occurrence.get(c, -1)
                                            # If no repetition within window, no problems.
                                            if l < curr_starting_pos:
                                            curr_length += 1
                                            else:
                                            # Check if it is the longest so far
                                            if curr_length > longest_len_so_far:
                                            longest_pos_so_far = curr_starting_pos
                                            longest_len_so_far = curr_length
                                            # Cut the prefix that has repetition
                                            curr_length -= l - curr_starting_pos
                                            curr_starting_pos = l + 1
                                            # In any case, update last_occurrence
                                            last_occurrence[c] = k

                                            # Maybe the longest substring is a suffix
                                            if curr_length > longest_len_so_far:
                                            longest_pos_so_far = curr_starting_pos
                                            longest_len_so_far = curr_length

                                            return S[longest_pos_so_far:longest_pos_so_far + longest_len_so_far]






                                            share|improve this answer












                                            share|improve this answer



                                            share|improve this answer










                                            answered Mar 16 '12 at 14:39









                                            aelguindy

                                            2,1201929




                                            2,1201929












                                            • This is in essence very similar to Karoly's solution. This has the advantage of requiring one pass instead of two on each character while his has the advantage of having slightly better space efficiency (his array is 0/1 therefore can be compacted into a bitmask).
                                              – aelguindy
                                              Mar 16 '12 at 14:46










                                            • Very well written. Thanks for the answer.
                                              – Stealth
                                              Dec 12 '12 at 4:54


















                                            • This is in essence very similar to Karoly's solution. This has the advantage of requiring one pass instead of two on each character while his has the advantage of having slightly better space efficiency (his array is 0/1 therefore can be compacted into a bitmask).
                                              – aelguindy
                                              Mar 16 '12 at 14:46










                                            • Very well written. Thanks for the answer.
                                              – Stealth
                                              Dec 12 '12 at 4:54
















                                            This is in essence very similar to Karoly's solution. This has the advantage of requiring one pass instead of two on each character while his has the advantage of having slightly better space efficiency (his array is 0/1 therefore can be compacted into a bitmask).
                                            – aelguindy
                                            Mar 16 '12 at 14:46




                                            This is in essence very similar to Karoly's solution. This has the advantage of requiring one pass instead of two on each character while his has the advantage of having slightly better space efficiency (his array is 0/1 therefore can be compacted into a bitmask).
                                            – aelguindy
                                            Mar 16 '12 at 14:46












                                            Very well written. Thanks for the answer.
                                            – Stealth
                                            Dec 12 '12 at 4:54




                                            Very well written. Thanks for the answer.
                                            – Stealth
                                            Dec 12 '12 at 4:54










                                            up vote
                                            2
                                            down vote













                                            EDITED:



                                            following is an implementation of the concesus. It occured to me after my original publication. so as not to delete original, it is presented following:



                                            public static String longestUniqueString(String S) {
                                            int start = 0, end = 0, length = 0;
                                            boolean bits = new boolean[256];
                                            int x = 0, y = 0;
                                            for (; x < S.length() && y < S.length() && length < S.length() - x; x++) {
                                            bits[S.charAt(x)] = true;
                                            for (y++; y < S.length() && !bits[S.charAt(y)]; y++) {
                                            bits[S.charAt(y)] = true;
                                            }
                                            if (length < y - x) {
                                            start = x;
                                            end = y;
                                            length = y - x;
                                            }
                                            while(y<S.length() && x<y && S.charAt(x) != S.charAt(y))
                                            bits[S.charAt(x++)]=false;
                                            }
                                            return S.substring(start, end);
                                            }//


                                            ORIGINAL POST:



                                            Here is my two cents. Test strings included. boolean bits = new boolean[256] may be larger to encompass some larger charset.



                                            public static String longestUniqueString(String S) {
                                            int start=0, end=0, length=0;
                                            boolean bits = new boolean[256];
                                            int x=0, y=0;
                                            for(;x<S.length() && y<S.length() && length < S.length()-x;x++) {
                                            Arrays.fill(bits, false);
                                            bits[S.charAt(x)]=true;
                                            for(y=x+1;y<S.length() && !bits[S.charAt(y)];y++) {
                                            bits[S.charAt(y)]=true;
                                            }
                                            if(length<y-x) {
                                            start=x;
                                            end=y;
                                            length=y-x;
                                            }
                                            }
                                            return S.substring(start,end);
                                            }//

                                            public static void main(String... args) {
                                            String input = { { "" }, { "a" }, { "ab" }, { "aab" }, { "abb" },
                                            { "aabc" }, { "abbc" }, { "aabbccdefgbc" },
                                            { "abcdeafghicabcdefghijklmnop" },
                                            { "abcdeafghicabcdefghijklmnopqrabcdx" },
                                            { "zxxaabcdeafghicabcdefghijklmnopqrabcdx" },
                                            {"aaabcdefgaaa"}};
                                            for (String a : input) {
                                            System.out.format("%s *** GIVES *** {%s}%n", Arrays.toString(a),
                                            longestUniqueString(a[0]));
                                            }
                                            }





                                            share|improve this answer



























                                              up vote
                                              2
                                              down vote













                                              EDITED:



                                              following is an implementation of the concesus. It occured to me after my original publication. so as not to delete original, it is presented following:



                                              public static String longestUniqueString(String S) {
                                              int start = 0, end = 0, length = 0;
                                              boolean bits = new boolean[256];
                                              int x = 0, y = 0;
                                              for (; x < S.length() && y < S.length() && length < S.length() - x; x++) {
                                              bits[S.charAt(x)] = true;
                                              for (y++; y < S.length() && !bits[S.charAt(y)]; y++) {
                                              bits[S.charAt(y)] = true;
                                              }
                                              if (length < y - x) {
                                              start = x;
                                              end = y;
                                              length = y - x;
                                              }
                                              while(y<S.length() && x<y && S.charAt(x) != S.charAt(y))
                                              bits[S.charAt(x++)]=false;
                                              }
                                              return S.substring(start, end);
                                              }//


                                              ORIGINAL POST:



                                              Here is my two cents. Test strings included. boolean bits = new boolean[256] may be larger to encompass some larger charset.



                                              public static String longestUniqueString(String S) {
                                              int start=0, end=0, length=0;
                                              boolean bits = new boolean[256];
                                              int x=0, y=0;
                                              for(;x<S.length() && y<S.length() && length < S.length()-x;x++) {
                                              Arrays.fill(bits, false);
                                              bits[S.charAt(x)]=true;
                                              for(y=x+1;y<S.length() && !bits[S.charAt(y)];y++) {
                                              bits[S.charAt(y)]=true;
                                              }
                                              if(length<y-x) {
                                              start=x;
                                              end=y;
                                              length=y-x;
                                              }
                                              }
                                              return S.substring(start,end);
                                              }//

                                              public static void main(String... args) {
                                              String input = { { "" }, { "a" }, { "ab" }, { "aab" }, { "abb" },
                                              { "aabc" }, { "abbc" }, { "aabbccdefgbc" },
                                              { "abcdeafghicabcdefghijklmnop" },
                                              { "abcdeafghicabcdefghijklmnopqrabcdx" },
                                              { "zxxaabcdeafghicabcdefghijklmnopqrabcdx" },
                                              {"aaabcdefgaaa"}};
                                              for (String a : input) {
                                              System.out.format("%s *** GIVES *** {%s}%n", Arrays.toString(a),
                                              longestUniqueString(a[0]));
                                              }
                                              }





                                              share|improve this answer

























                                                up vote
                                                2
                                                down vote










                                                up vote
                                                2
                                                down vote









                                                EDITED:



                                                following is an implementation of the concesus. It occured to me after my original publication. so as not to delete original, it is presented following:



                                                public static String longestUniqueString(String S) {
                                                int start = 0, end = 0, length = 0;
                                                boolean bits = new boolean[256];
                                                int x = 0, y = 0;
                                                for (; x < S.length() && y < S.length() && length < S.length() - x; x++) {
                                                bits[S.charAt(x)] = true;
                                                for (y++; y < S.length() && !bits[S.charAt(y)]; y++) {
                                                bits[S.charAt(y)] = true;
                                                }
                                                if (length < y - x) {
                                                start = x;
                                                end = y;
                                                length = y - x;
                                                }
                                                while(y<S.length() && x<y && S.charAt(x) != S.charAt(y))
                                                bits[S.charAt(x++)]=false;
                                                }
                                                return S.substring(start, end);
                                                }//


                                                ORIGINAL POST:



                                                Here is my two cents. Test strings included. boolean bits = new boolean[256] may be larger to encompass some larger charset.



                                                public static String longestUniqueString(String S) {
                                                int start=0, end=0, length=0;
                                                boolean bits = new boolean[256];
                                                int x=0, y=0;
                                                for(;x<S.length() && y<S.length() && length < S.length()-x;x++) {
                                                Arrays.fill(bits, false);
                                                bits[S.charAt(x)]=true;
                                                for(y=x+1;y<S.length() && !bits[S.charAt(y)];y++) {
                                                bits[S.charAt(y)]=true;
                                                }
                                                if(length<y-x) {
                                                start=x;
                                                end=y;
                                                length=y-x;
                                                }
                                                }
                                                return S.substring(start,end);
                                                }//

                                                public static void main(String... args) {
                                                String input = { { "" }, { "a" }, { "ab" }, { "aab" }, { "abb" },
                                                { "aabc" }, { "abbc" }, { "aabbccdefgbc" },
                                                { "abcdeafghicabcdefghijklmnop" },
                                                { "abcdeafghicabcdefghijklmnopqrabcdx" },
                                                { "zxxaabcdeafghicabcdefghijklmnopqrabcdx" },
                                                {"aaabcdefgaaa"}};
                                                for (String a : input) {
                                                System.out.format("%s *** GIVES *** {%s}%n", Arrays.toString(a),
                                                longestUniqueString(a[0]));
                                                }
                                                }





                                                share|improve this answer














                                                EDITED:



                                                following is an implementation of the concesus. It occured to me after my original publication. so as not to delete original, it is presented following:



                                                public static String longestUniqueString(String S) {
                                                int start = 0, end = 0, length = 0;
                                                boolean bits = new boolean[256];
                                                int x = 0, y = 0;
                                                for (; x < S.length() && y < S.length() && length < S.length() - x; x++) {
                                                bits[S.charAt(x)] = true;
                                                for (y++; y < S.length() && !bits[S.charAt(y)]; y++) {
                                                bits[S.charAt(y)] = true;
                                                }
                                                if (length < y - x) {
                                                start = x;
                                                end = y;
                                                length = y - x;
                                                }
                                                while(y<S.length() && x<y && S.charAt(x) != S.charAt(y))
                                                bits[S.charAt(x++)]=false;
                                                }
                                                return S.substring(start, end);
                                                }//


                                                ORIGINAL POST:



                                                Here is my two cents. Test strings included. boolean bits = new boolean[256] may be larger to encompass some larger charset.



                                                public static String longestUniqueString(String S) {
                                                int start=0, end=0, length=0;
                                                boolean bits = new boolean[256];
                                                int x=0, y=0;
                                                for(;x<S.length() && y<S.length() && length < S.length()-x;x++) {
                                                Arrays.fill(bits, false);
                                                bits[S.charAt(x)]=true;
                                                for(y=x+1;y<S.length() && !bits[S.charAt(y)];y++) {
                                                bits[S.charAt(y)]=true;
                                                }
                                                if(length<y-x) {
                                                start=x;
                                                end=y;
                                                length=y-x;
                                                }
                                                }
                                                return S.substring(start,end);
                                                }//

                                                public static void main(String... args) {
                                                String input = { { "" }, { "a" }, { "ab" }, { "aab" }, { "abb" },
                                                { "aabc" }, { "abbc" }, { "aabbccdefgbc" },
                                                { "abcdeafghicabcdefghijklmnop" },
                                                { "abcdeafghicabcdefghijklmnopqrabcdx" },
                                                { "zxxaabcdeafghicabcdefghijklmnopqrabcdx" },
                                                {"aaabcdefgaaa"}};
                                                for (String a : input) {
                                                System.out.format("%s *** GIVES *** {%s}%n", Arrays.toString(a),
                                                longestUniqueString(a[0]));
                                                }
                                                }






                                                share|improve this answer














                                                share|improve this answer



                                                share|improve this answer








                                                edited Mar 19 '12 at 16:30

























                                                answered Mar 18 '12 at 18:31









                                                kasavbere

                                                3,85393867




                                                3,85393867






















                                                    up vote
                                                    2
                                                    down vote













                                                    Here is one more solution with only 2 string variables:



                                                    public static String getLongestNonRepeatingString(String inputStr){
                                                    if(inputStr == null){
                                                    return null;
                                                    }

                                                    String maxStr = "";
                                                    String tempStr = "";
                                                    for(int i=0; i < inputStr.length(); i++){
                                                    // 1. if tempStr contains new character, then change tempStr
                                                    if(tempStr.contains("" + inputStr.charAt(i))){
                                                    tempStr = tempStr.substring(tempStr.lastIndexOf(inputStr.charAt(i)) + 1);
                                                    }
                                                    // 2. add new character
                                                    tempStr = tempStr + inputStr.charAt(i);
                                                    // 3. replace maxStr with tempStr if tempStr is longer
                                                    if(maxStr.length() < tempStr.length()){
                                                    maxStr = tempStr;
                                                    }
                                                    }

                                                    return maxStr;
                                                    }





                                                    share|improve this answer

























                                                      up vote
                                                      2
                                                      down vote













                                                      Here is one more solution with only 2 string variables:



                                                      public static String getLongestNonRepeatingString(String inputStr){
                                                      if(inputStr == null){
                                                      return null;
                                                      }

                                                      String maxStr = "";
                                                      String tempStr = "";
                                                      for(int i=0; i < inputStr.length(); i++){
                                                      // 1. if tempStr contains new character, then change tempStr
                                                      if(tempStr.contains("" + inputStr.charAt(i))){
                                                      tempStr = tempStr.substring(tempStr.lastIndexOf(inputStr.charAt(i)) + 1);
                                                      }
                                                      // 2. add new character
                                                      tempStr = tempStr + inputStr.charAt(i);
                                                      // 3. replace maxStr with tempStr if tempStr is longer
                                                      if(maxStr.length() < tempStr.length()){
                                                      maxStr = tempStr;
                                                      }
                                                      }

                                                      return maxStr;
                                                      }





                                                      share|improve this answer























                                                        up vote
                                                        2
                                                        down vote










                                                        up vote
                                                        2
                                                        down vote









                                                        Here is one more solution with only 2 string variables:



                                                        public static String getLongestNonRepeatingString(String inputStr){
                                                        if(inputStr == null){
                                                        return null;
                                                        }

                                                        String maxStr = "";
                                                        String tempStr = "";
                                                        for(int i=0; i < inputStr.length(); i++){
                                                        // 1. if tempStr contains new character, then change tempStr
                                                        if(tempStr.contains("" + inputStr.charAt(i))){
                                                        tempStr = tempStr.substring(tempStr.lastIndexOf(inputStr.charAt(i)) + 1);
                                                        }
                                                        // 2. add new character
                                                        tempStr = tempStr + inputStr.charAt(i);
                                                        // 3. replace maxStr with tempStr if tempStr is longer
                                                        if(maxStr.length() < tempStr.length()){
                                                        maxStr = tempStr;
                                                        }
                                                        }

                                                        return maxStr;
                                                        }





                                                        share|improve this answer












                                                        Here is one more solution with only 2 string variables:



                                                        public static String getLongestNonRepeatingString(String inputStr){
                                                        if(inputStr == null){
                                                        return null;
                                                        }

                                                        String maxStr = "";
                                                        String tempStr = "";
                                                        for(int i=0; i < inputStr.length(); i++){
                                                        // 1. if tempStr contains new character, then change tempStr
                                                        if(tempStr.contains("" + inputStr.charAt(i))){
                                                        tempStr = tempStr.substring(tempStr.lastIndexOf(inputStr.charAt(i)) + 1);
                                                        }
                                                        // 2. add new character
                                                        tempStr = tempStr + inputStr.charAt(i);
                                                        // 3. replace maxStr with tempStr if tempStr is longer
                                                        if(maxStr.length() < tempStr.length()){
                                                        maxStr = tempStr;
                                                        }
                                                        }

                                                        return maxStr;
                                                        }






                                                        share|improve this answer












                                                        share|improve this answer



                                                        share|improve this answer










                                                        answered Mar 21 '16 at 20:29









                                                        Saurin

                                                        393




                                                        393






















                                                            up vote
                                                            1
                                                            down vote













                                                            Algorithm in JavaScript (w/ lots of comments)..



                                                            /**
                                                            Given a string S find longest substring without repeating characters.
                                                            Example:

                                                            Input: "stackoverflow"
                                                            Output: "stackoverfl"

                                                            Input: "stackoverflowabcdefghijklmn"
                                                            Output: "owabcdefghijklmn"
                                                            */
                                                            function findLongestNonRepeatingSubStr(input) {
                                                            var chars = input.split('');
                                                            var currChar;
                                                            var str = "";
                                                            var longestStr = "";
                                                            var hash = {};
                                                            for (var i = 0; i < chars.length; i++) {
                                                            currChar = chars[i];
                                                            if (!hash[chars[i]]) { // if hash doesn't have the char,
                                                            str += currChar; //add it to str
                                                            hash[chars[i]] = {index:i};//store the index of the char
                                                            } else {// if a duplicate char found..
                                                            //store the current longest non-repeating chars. until now
                                                            //In case of equal-length, <= right-most str, < will result in left most str
                                                            if(longestStr.length <= str.length) {
                                                            longestStr = str;
                                                            }
                                                            //Get the previous duplicate char's index
                                                            var prevDupeIndex = hash[currChar].index;

                                                            //Find all the chars AFTER previous duplicate char and current one
                                                            var strFromPrevDupe = input.substring(prevDupeIndex + 1, i);
                                                            //*NEW* longest string will be chars AFTER prevDupe till current char
                                                            str = strFromPrevDupe + currChar;
                                                            //console.log(str);
                                                            //Also, Reset hash to letters AFTER duplicate letter till current char
                                                            hash = {};
                                                            for (var j = prevDupeIndex + 1; j <= i; j++) {
                                                            hash[input.charAt(j)] = {index:j};
                                                            }
                                                            }
                                                            }
                                                            return longestStr.length > str.length ? longestStr : str;
                                                            }

                                                            //console.log("stackoverflow => " + findLongestNonRepeatingSubStr("stackoverflow"));
                                                            //returns stackoverfl

                                                            //console.log("stackoverflowabcdefghijklmn => " +
                                                            findLongestNonRepeatingSubStr("stackoverflowabcdefghijklmn")); //returns owabcdefghijklmn

                                                            //console.log("1230123450101 => " + findLongestNonRepeatingSubStr("1230123450101")); //
                                                            returns 234501





                                                            share|improve this answer

























                                                              up vote
                                                              1
                                                              down vote













                                                              Algorithm in JavaScript (w/ lots of comments)..



                                                              /**
                                                              Given a string S find longest substring without repeating characters.
                                                              Example:

                                                              Input: "stackoverflow"
                                                              Output: "stackoverfl"

                                                              Input: "stackoverflowabcdefghijklmn"
                                                              Output: "owabcdefghijklmn"
                                                              */
                                                              function findLongestNonRepeatingSubStr(input) {
                                                              var chars = input.split('');
                                                              var currChar;
                                                              var str = "";
                                                              var longestStr = "";
                                                              var hash = {};
                                                              for (var i = 0; i < chars.length; i++) {
                                                              currChar = chars[i];
                                                              if (!hash[chars[i]]) { // if hash doesn't have the char,
                                                              str += currChar; //add it to str
                                                              hash[chars[i]] = {index:i};//store the index of the char
                                                              } else {// if a duplicate char found..
                                                              //store the current longest non-repeating chars. until now
                                                              //In case of equal-length, <= right-most str, < will result in left most str
                                                              if(longestStr.length <= str.length) {
                                                              longestStr = str;
                                                              }
                                                              //Get the previous duplicate char's index
                                                              var prevDupeIndex = hash[currChar].index;

                                                              //Find all the chars AFTER previous duplicate char and current one
                                                              var strFromPrevDupe = input.substring(prevDupeIndex + 1, i);
                                                              //*NEW* longest string will be chars AFTER prevDupe till current char
                                                              str = strFromPrevDupe + currChar;
                                                              //console.log(str);
                                                              //Also, Reset hash to letters AFTER duplicate letter till current char
                                                              hash = {};
                                                              for (var j = prevDupeIndex + 1; j <= i; j++) {
                                                              hash[input.charAt(j)] = {index:j};
                                                              }
                                                              }
                                                              }
                                                              return longestStr.length > str.length ? longestStr : str;
                                                              }

                                                              //console.log("stackoverflow => " + findLongestNonRepeatingSubStr("stackoverflow"));
                                                              //returns stackoverfl

                                                              //console.log("stackoverflowabcdefghijklmn => " +
                                                              findLongestNonRepeatingSubStr("stackoverflowabcdefghijklmn")); //returns owabcdefghijklmn

                                                              //console.log("1230123450101 => " + findLongestNonRepeatingSubStr("1230123450101")); //
                                                              returns 234501





                                                              share|improve this answer























                                                                up vote
                                                                1
                                                                down vote










                                                                up vote
                                                                1
                                                                down vote









                                                                Algorithm in JavaScript (w/ lots of comments)..



                                                                /**
                                                                Given a string S find longest substring without repeating characters.
                                                                Example:

                                                                Input: "stackoverflow"
                                                                Output: "stackoverfl"

                                                                Input: "stackoverflowabcdefghijklmn"
                                                                Output: "owabcdefghijklmn"
                                                                */
                                                                function findLongestNonRepeatingSubStr(input) {
                                                                var chars = input.split('');
                                                                var currChar;
                                                                var str = "";
                                                                var longestStr = "";
                                                                var hash = {};
                                                                for (var i = 0; i < chars.length; i++) {
                                                                currChar = chars[i];
                                                                if (!hash[chars[i]]) { // if hash doesn't have the char,
                                                                str += currChar; //add it to str
                                                                hash[chars[i]] = {index:i};//store the index of the char
                                                                } else {// if a duplicate char found..
                                                                //store the current longest non-repeating chars. until now
                                                                //In case of equal-length, <= right-most str, < will result in left most str
                                                                if(longestStr.length <= str.length) {
                                                                longestStr = str;
                                                                }
                                                                //Get the previous duplicate char's index
                                                                var prevDupeIndex = hash[currChar].index;

                                                                //Find all the chars AFTER previous duplicate char and current one
                                                                var strFromPrevDupe = input.substring(prevDupeIndex + 1, i);
                                                                //*NEW* longest string will be chars AFTER prevDupe till current char
                                                                str = strFromPrevDupe + currChar;
                                                                //console.log(str);
                                                                //Also, Reset hash to letters AFTER duplicate letter till current char
                                                                hash = {};
                                                                for (var j = prevDupeIndex + 1; j <= i; j++) {
                                                                hash[input.charAt(j)] = {index:j};
                                                                }
                                                                }
                                                                }
                                                                return longestStr.length > str.length ? longestStr : str;
                                                                }

                                                                //console.log("stackoverflow => " + findLongestNonRepeatingSubStr("stackoverflow"));
                                                                //returns stackoverfl

                                                                //console.log("stackoverflowabcdefghijklmn => " +
                                                                findLongestNonRepeatingSubStr("stackoverflowabcdefghijklmn")); //returns owabcdefghijklmn

                                                                //console.log("1230123450101 => " + findLongestNonRepeatingSubStr("1230123450101")); //
                                                                returns 234501





                                                                share|improve this answer












                                                                Algorithm in JavaScript (w/ lots of comments)..



                                                                /**
                                                                Given a string S find longest substring without repeating characters.
                                                                Example:

                                                                Input: "stackoverflow"
                                                                Output: "stackoverfl"

                                                                Input: "stackoverflowabcdefghijklmn"
                                                                Output: "owabcdefghijklmn"
                                                                */
                                                                function findLongestNonRepeatingSubStr(input) {
                                                                var chars = input.split('');
                                                                var currChar;
                                                                var str = "";
                                                                var longestStr = "";
                                                                var hash = {};
                                                                for (var i = 0; i < chars.length; i++) {
                                                                currChar = chars[i];
                                                                if (!hash[chars[i]]) { // if hash doesn't have the char,
                                                                str += currChar; //add it to str
                                                                hash[chars[i]] = {index:i};//store the index of the char
                                                                } else {// if a duplicate char found..
                                                                //store the current longest non-repeating chars. until now
                                                                //In case of equal-length, <= right-most str, < will result in left most str
                                                                if(longestStr.length <= str.length) {
                                                                longestStr = str;
                                                                }
                                                                //Get the previous duplicate char's index
                                                                var prevDupeIndex = hash[currChar].index;

                                                                //Find all the chars AFTER previous duplicate char and current one
                                                                var strFromPrevDupe = input.substring(prevDupeIndex + 1, i);
                                                                //*NEW* longest string will be chars AFTER prevDupe till current char
                                                                str = strFromPrevDupe + currChar;
                                                                //console.log(str);
                                                                //Also, Reset hash to letters AFTER duplicate letter till current char
                                                                hash = {};
                                                                for (var j = prevDupeIndex + 1; j <= i; j++) {
                                                                hash[input.charAt(j)] = {index:j};
                                                                }
                                                                }
                                                                }
                                                                return longestStr.length > str.length ? longestStr : str;
                                                                }

                                                                //console.log("stackoverflow => " + findLongestNonRepeatingSubStr("stackoverflow"));
                                                                //returns stackoverfl

                                                                //console.log("stackoverflowabcdefghijklmn => " +
                                                                findLongestNonRepeatingSubStr("stackoverflowabcdefghijklmn")); //returns owabcdefghijklmn

                                                                //console.log("1230123450101 => " + findLongestNonRepeatingSubStr("1230123450101")); //
                                                                returns 234501






                                                                share|improve this answer












                                                                share|improve this answer



                                                                share|improve this answer










                                                                answered Feb 14 '13 at 6:02









                                                                Raja Rao

                                                                3,11611922




                                                                3,11611922






















                                                                    up vote
                                                                    1
                                                                    down vote














                                                                    We can consider all substrings one by one and check for each substring whether it contains all unique characters or not.
                                                                    There will be n*(n+1)/2 substrings. Whether a substirng contains all unique characters or not can be checked in linear time by
                                                                    scanning it from left to right and keeping a map of visited characters. Time complexity of this solution would be O(n^3).`







                                                                    import java.util.ArrayList;
                                                                    import java.util.Collections;
                                                                    import java.util.HashMap;
                                                                    import java.util.LinkedHashSet;
                                                                    import java.util.List;
                                                                    import java.util.Map;
                                                                    import java.util.Set;


                                                                    public class LengthOfLongestSubstringWithOutRepeatingChar {
                                                                    public static void main(String args)
                                                                    {
                                                                    String s="stackoverflow";
                                                                    //allSubString(s);
                                                                    System.out.println("result of find"+find(s));
                                                                    }
                                                                    public static String find(String s)
                                                                    {
                                                                    List<String> allSubsring=allSubString(s);
                                                                    Set<String> main =new LinkedHashSet<String>();
                                                                    for(String temp:allSubsring)
                                                                    {
                                                                    boolean a = false;
                                                                    for(int i=0;i<temp.length();i++)
                                                                    {
                                                                    for(int k=temp.length()-1;k>i;k--)
                                                                    {
                                                                    if(temp.charAt(k)==temp.charAt(i))
                                                                    a=true;
                                                                    }
                                                                    }
                                                                    if(!a)
                                                                    {
                                                                    main.add(temp);
                                                                    }
                                                                    }
                                                                    /*for(String x:main)
                                                                    {
                                                                    System.out.println(x);
                                                                    }*/
                                                                    String res=null;
                                                                    int min=0,max=s.length();
                                                                    for(String temp:main)
                                                                    {
                                                                    if(temp.length()>min&&temp.length()<max)
                                                                    {
                                                                    min=temp.length();
                                                                    res=temp;
                                                                    }
                                                                    }
                                                                    System.out.println(min+"ha ha ha"+res+"he he he");
                                                                    return res;

                                                                    }
                                                                    //substrings left to right ban rahi hai

                                                                    private static List<String> allSubString(String str) {
                                                                    List<String> all=new ArrayList<String>();
                                                                    int c=0;
                                                                    for (int i = 0; i < str.length(); i++) {
                                                                    for (int j = 0; j <= i; j++) {
                                                                    if (!all.contains(str.substring(j, i + 1)))
                                                                    {
                                                                    c++;
                                                                    all.add(str.substring(j, i + 1));
                                                                    }
                                                                    }
                                                                    }
                                                                    for(String temp:all)
                                                                    {
                                                                    System.out.println("substring :-"+temp);
                                                                    }
                                                                    System.out.println("count"+c);
                                                                    return all;
                                                                    }
                                                                    }








                                                                    share|improve this answer

























                                                                      up vote
                                                                      1
                                                                      down vote














                                                                      We can consider all substrings one by one and check for each substring whether it contains all unique characters or not.
                                                                      There will be n*(n+1)/2 substrings. Whether a substirng contains all unique characters or not can be checked in linear time by
                                                                      scanning it from left to right and keeping a map of visited characters. Time complexity of this solution would be O(n^3).`







                                                                      import java.util.ArrayList;
                                                                      import java.util.Collections;
                                                                      import java.util.HashMap;
                                                                      import java.util.LinkedHashSet;
                                                                      import java.util.List;
                                                                      import java.util.Map;
                                                                      import java.util.Set;


                                                                      public class LengthOfLongestSubstringWithOutRepeatingChar {
                                                                      public static void main(String args)
                                                                      {
                                                                      String s="stackoverflow";
                                                                      //allSubString(s);
                                                                      System.out.println("result of find"+find(s));
                                                                      }
                                                                      public static String find(String s)
                                                                      {
                                                                      List<String> allSubsring=allSubString(s);
                                                                      Set<String> main =new LinkedHashSet<String>();
                                                                      for(String temp:allSubsring)
                                                                      {
                                                                      boolean a = false;
                                                                      for(int i=0;i<temp.length();i++)
                                                                      {
                                                                      for(int k=temp.length()-1;k>i;k--)
                                                                      {
                                                                      if(temp.charAt(k)==temp.charAt(i))
                                                                      a=true;
                                                                      }
                                                                      }
                                                                      if(!a)
                                                                      {
                                                                      main.add(temp);
                                                                      }
                                                                      }
                                                                      /*for(String x:main)
                                                                      {
                                                                      System.out.println(x);
                                                                      }*/
                                                                      String res=null;
                                                                      int min=0,max=s.length();
                                                                      for(String temp:main)
                                                                      {
                                                                      if(temp.length()>min&&temp.length()<max)
                                                                      {
                                                                      min=temp.length();
                                                                      res=temp;
                                                                      }
                                                                      }
                                                                      System.out.println(min+"ha ha ha"+res+"he he he");
                                                                      return res;

                                                                      }
                                                                      //substrings left to right ban rahi hai

                                                                      private static List<String> allSubString(String str) {
                                                                      List<String> all=new ArrayList<String>();
                                                                      int c=0;
                                                                      for (int i = 0; i < str.length(); i++) {
                                                                      for (int j = 0; j <= i; j++) {
                                                                      if (!all.contains(str.substring(j, i + 1)))
                                                                      {
                                                                      c++;
                                                                      all.add(str.substring(j, i + 1));
                                                                      }
                                                                      }
                                                                      }
                                                                      for(String temp:all)
                                                                      {
                                                                      System.out.println("substring :-"+temp);
                                                                      }
                                                                      System.out.println("count"+c);
                                                                      return all;
                                                                      }
                                                                      }








                                                                      share|improve this answer























                                                                        up vote
                                                                        1
                                                                        down vote










                                                                        up vote
                                                                        1
                                                                        down vote










                                                                        We can consider all substrings one by one and check for each substring whether it contains all unique characters or not.
                                                                        There will be n*(n+1)/2 substrings. Whether a substirng contains all unique characters or not can be checked in linear time by
                                                                        scanning it from left to right and keeping a map of visited characters. Time complexity of this solution would be O(n^3).`







                                                                        import java.util.ArrayList;
                                                                        import java.util.Collections;
                                                                        import java.util.HashMap;
                                                                        import java.util.LinkedHashSet;
                                                                        import java.util.List;
                                                                        import java.util.Map;
                                                                        import java.util.Set;


                                                                        public class LengthOfLongestSubstringWithOutRepeatingChar {
                                                                        public static void main(String args)
                                                                        {
                                                                        String s="stackoverflow";
                                                                        //allSubString(s);
                                                                        System.out.println("result of find"+find(s));
                                                                        }
                                                                        public static String find(String s)
                                                                        {
                                                                        List<String> allSubsring=allSubString(s);
                                                                        Set<String> main =new LinkedHashSet<String>();
                                                                        for(String temp:allSubsring)
                                                                        {
                                                                        boolean a = false;
                                                                        for(int i=0;i<temp.length();i++)
                                                                        {
                                                                        for(int k=temp.length()-1;k>i;k--)
                                                                        {
                                                                        if(temp.charAt(k)==temp.charAt(i))
                                                                        a=true;
                                                                        }
                                                                        }
                                                                        if(!a)
                                                                        {
                                                                        main.add(temp);
                                                                        }
                                                                        }
                                                                        /*for(String x:main)
                                                                        {
                                                                        System.out.println(x);
                                                                        }*/
                                                                        String res=null;
                                                                        int min=0,max=s.length();
                                                                        for(String temp:main)
                                                                        {
                                                                        if(temp.length()>min&&temp.length()<max)
                                                                        {
                                                                        min=temp.length();
                                                                        res=temp;
                                                                        }
                                                                        }
                                                                        System.out.println(min+"ha ha ha"+res+"he he he");
                                                                        return res;

                                                                        }
                                                                        //substrings left to right ban rahi hai

                                                                        private static List<String> allSubString(String str) {
                                                                        List<String> all=new ArrayList<String>();
                                                                        int c=0;
                                                                        for (int i = 0; i < str.length(); i++) {
                                                                        for (int j = 0; j <= i; j++) {
                                                                        if (!all.contains(str.substring(j, i + 1)))
                                                                        {
                                                                        c++;
                                                                        all.add(str.substring(j, i + 1));
                                                                        }
                                                                        }
                                                                        }
                                                                        for(String temp:all)
                                                                        {
                                                                        System.out.println("substring :-"+temp);
                                                                        }
                                                                        System.out.println("count"+c);
                                                                        return all;
                                                                        }
                                                                        }








                                                                        share|improve this answer













                                                                        We can consider all substrings one by one and check for each substring whether it contains all unique characters or not.
                                                                        There will be n*(n+1)/2 substrings. Whether a substirng contains all unique characters or not can be checked in linear time by
                                                                        scanning it from left to right and keeping a map of visited characters. Time complexity of this solution would be O(n^3).`







                                                                        import java.util.ArrayList;
                                                                        import java.util.Collections;
                                                                        import java.util.HashMap;
                                                                        import java.util.LinkedHashSet;
                                                                        import java.util.List;
                                                                        import java.util.Map;
                                                                        import java.util.Set;


                                                                        public class LengthOfLongestSubstringWithOutRepeatingChar {
                                                                        public static void main(String args)
                                                                        {
                                                                        String s="stackoverflow";
                                                                        //allSubString(s);
                                                                        System.out.println("result of find"+find(s));
                                                                        }
                                                                        public static String find(String s)
                                                                        {
                                                                        List<String> allSubsring=allSubString(s);
                                                                        Set<String> main =new LinkedHashSet<String>();
                                                                        for(String temp:allSubsring)
                                                                        {
                                                                        boolean a = false;
                                                                        for(int i=0;i<temp.length();i++)
                                                                        {
                                                                        for(int k=temp.length()-1;k>i;k--)
                                                                        {
                                                                        if(temp.charAt(k)==temp.charAt(i))
                                                                        a=true;
                                                                        }
                                                                        }
                                                                        if(!a)
                                                                        {
                                                                        main.add(temp);
                                                                        }
                                                                        }
                                                                        /*for(String x:main)
                                                                        {
                                                                        System.out.println(x);
                                                                        }*/
                                                                        String res=null;
                                                                        int min=0,max=s.length();
                                                                        for(String temp:main)
                                                                        {
                                                                        if(temp.length()>min&&temp.length()<max)
                                                                        {
                                                                        min=temp.length();
                                                                        res=temp;
                                                                        }
                                                                        }
                                                                        System.out.println(min+"ha ha ha"+res+"he he he");
                                                                        return res;

                                                                        }
                                                                        //substrings left to right ban rahi hai

                                                                        private static List<String> allSubString(String str) {
                                                                        List<String> all=new ArrayList<String>();
                                                                        int c=0;
                                                                        for (int i = 0; i < str.length(); i++) {
                                                                        for (int j = 0; j <= i; j++) {
                                                                        if (!all.contains(str.substring(j, i + 1)))
                                                                        {
                                                                        c++;
                                                                        all.add(str.substring(j, i + 1));
                                                                        }
                                                                        }
                                                                        }
                                                                        for(String temp:all)
                                                                        {
                                                                        System.out.println("substring :-"+temp);
                                                                        }
                                                                        System.out.println("count"+c);
                                                                        return all;
                                                                        }
                                                                        }








                                                                        import java.util.ArrayList;
                                                                        import java.util.Collections;
                                                                        import java.util.HashMap;
                                                                        import java.util.LinkedHashSet;
                                                                        import java.util.List;
                                                                        import java.util.Map;
                                                                        import java.util.Set;


                                                                        public class LengthOfLongestSubstringWithOutRepeatingChar {
                                                                        public static void main(String args)
                                                                        {
                                                                        String s="stackoverflow";
                                                                        //allSubString(s);
                                                                        System.out.println("result of find"+find(s));
                                                                        }
                                                                        public static String find(String s)
                                                                        {
                                                                        List<String> allSubsring=allSubString(s);
                                                                        Set<String> main =new LinkedHashSet<String>();
                                                                        for(String temp:allSubsring)
                                                                        {
                                                                        boolean a = false;
                                                                        for(int i=0;i<temp.length();i++)
                                                                        {
                                                                        for(int k=temp.length()-1;k>i;k--)
                                                                        {
                                                                        if(temp.charAt(k)==temp.charAt(i))
                                                                        a=true;
                                                                        }
                                                                        }
                                                                        if(!a)
                                                                        {
                                                                        main.add(temp);
                                                                        }
                                                                        }
                                                                        /*for(String x:main)
                                                                        {
                                                                        System.out.println(x);
                                                                        }*/
                                                                        String res=null;
                                                                        int min=0,max=s.length();
                                                                        for(String temp:main)
                                                                        {
                                                                        if(temp.length()>min&&temp.length()<max)
                                                                        {
                                                                        min=temp.length();
                                                                        res=temp;
                                                                        }
                                                                        }
                                                                        System.out.println(min+"ha ha ha"+res+"he he he");
                                                                        return res;

                                                                        }
                                                                        //substrings left to right ban rahi hai

                                                                        private static List<String> allSubString(String str) {
                                                                        List<String> all=new ArrayList<String>();
                                                                        int c=0;
                                                                        for (int i = 0; i < str.length(); i++) {
                                                                        for (int j = 0; j <= i; j++) {
                                                                        if (!all.contains(str.substring(j, i + 1)))
                                                                        {
                                                                        c++;
                                                                        all.add(str.substring(j, i + 1));
                                                                        }
                                                                        }
                                                                        }
                                                                        for(String temp:all)
                                                                        {
                                                                        System.out.println("substring :-"+temp);
                                                                        }
                                                                        System.out.println("count"+c);
                                                                        return all;
                                                                        }
                                                                        }





                                                                        import java.util.ArrayList;
                                                                        import java.util.Collections;
                                                                        import java.util.HashMap;
                                                                        import java.util.LinkedHashSet;
                                                                        import java.util.List;
                                                                        import java.util.Map;
                                                                        import java.util.Set;


                                                                        public class LengthOfLongestSubstringWithOutRepeatingChar {
                                                                        public static void main(String args)
                                                                        {
                                                                        String s="stackoverflow";
                                                                        //allSubString(s);
                                                                        System.out.println("result of find"+find(s));
                                                                        }
                                                                        public static String find(String s)
                                                                        {
                                                                        List<String> allSubsring=allSubString(s);
                                                                        Set<String> main =new LinkedHashSet<String>();
                                                                        for(String temp:allSubsring)
                                                                        {
                                                                        boolean a = false;
                                                                        for(int i=0;i<temp.length();i++)
                                                                        {
                                                                        for(int k=temp.length()-1;k>i;k--)
                                                                        {
                                                                        if(temp.charAt(k)==temp.charAt(i))
                                                                        a=true;
                                                                        }
                                                                        }
                                                                        if(!a)
                                                                        {
                                                                        main.add(temp);
                                                                        }
                                                                        }
                                                                        /*for(String x:main)
                                                                        {
                                                                        System.out.println(x);
                                                                        }*/
                                                                        String res=null;
                                                                        int min=0,max=s.length();
                                                                        for(String temp:main)
                                                                        {
                                                                        if(temp.length()>min&&temp.length()<max)
                                                                        {
                                                                        min=temp.length();
                                                                        res=temp;
                                                                        }
                                                                        }
                                                                        System.out.println(min+"ha ha ha"+res+"he he he");
                                                                        return res;

                                                                        }
                                                                        //substrings left to right ban rahi hai

                                                                        private static List<String> allSubString(String str) {
                                                                        List<String> all=new ArrayList<String>();
                                                                        int c=0;
                                                                        for (int i = 0; i < str.length(); i++) {
                                                                        for (int j = 0; j <= i; j++) {
                                                                        if (!all.contains(str.substring(j, i + 1)))
                                                                        {
                                                                        c++;
                                                                        all.add(str.substring(j, i + 1));
                                                                        }
                                                                        }
                                                                        }
                                                                        for(String temp:all)
                                                                        {
                                                                        System.out.println("substring :-"+temp);
                                                                        }
                                                                        System.out.println("count"+c);
                                                                        return all;
                                                                        }
                                                                        }






                                                                        share|improve this answer












                                                                        share|improve this answer



                                                                        share|improve this answer










                                                                        answered Feb 16 '15 at 20:15









                                                                        zoha khan

                                                                        212




                                                                        212






















                                                                            up vote
                                                                            1
                                                                            down vote













                                                                            enter image description here
                                                                            simple python snippet
                                                                            l=length p=position
                                                                            maxl=maxlength maxp=maxposition






                                                                            share|improve this answer



























                                                                              up vote
                                                                              1
                                                                              down vote













                                                                              enter image description here
                                                                              simple python snippet
                                                                              l=length p=position
                                                                              maxl=maxlength maxp=maxposition






                                                                              share|improve this answer

























                                                                                up vote
                                                                                1
                                                                                down vote










                                                                                up vote
                                                                                1
                                                                                down vote









                                                                                enter image description here
                                                                                simple python snippet
                                                                                l=length p=position
                                                                                maxl=maxlength maxp=maxposition






                                                                                share|improve this answer














                                                                                enter image description here
                                                                                simple python snippet
                                                                                l=length p=position
                                                                                maxl=maxlength maxp=maxposition







                                                                                share|improve this answer














                                                                                share|improve this answer



                                                                                share|improve this answer








                                                                                edited Apr 23 '17 at 6:29

























                                                                                answered Apr 23 '17 at 6:07









                                                                                Sudhakar Kalmari

                                                                                1,6092126




                                                                                1,6092126






















                                                                                    up vote
                                                                                    0
                                                                                    down vote













                                                                                    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<String> allOutPuts = new ArrayList<String>();
                                                                                    TreeMap<Integer, Set> map = new TreeMap<Integer, Set>();
                                                                                    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<Character> set = new LinkedHashSet<Character>();
                                                                                    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<Character>(input.charAt(i));
                                                                                    }

                                                                                    }

                                                                                    return longestString;
                                                                                    }

                                                                                    private static String getStringFromSet(Set<Character> set) {

                                                                                    Object charArr = set.toArray();

                                                                                    StringBuffer strBuff = new StringBuffer();
                                                                                    for (Object obj : charArr) {
                                                                                    strBuff.append(obj);

                                                                                    }

                                                                                    return strBuff.toString();
                                                                                    }
                                                                                    }





                                                                                    share|improve this answer

















                                                                                    • 1




                                                                                      It does not hurt to add an explanation to the code.
                                                                                      – Tunaki
                                                                                      Feb 23 '15 at 22:42















                                                                                    up vote
                                                                                    0
                                                                                    down vote













                                                                                    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<String> allOutPuts = new ArrayList<String>();
                                                                                    TreeMap<Integer, Set> map = new TreeMap<Integer, Set>();
                                                                                    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<Character> set = new LinkedHashSet<Character>();
                                                                                    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<Character>(input.charAt(i));
                                                                                    }

                                                                                    }

                                                                                    return longestString;
                                                                                    }

                                                                                    private static String getStringFromSet(Set<Character> set) {

                                                                                    Object charArr = set.toArray();

                                                                                    StringBuffer strBuff = new StringBuffer();
                                                                                    for (Object obj : charArr) {
                                                                                    strBuff.append(obj);

                                                                                    }

                                                                                    return strBuff.toString();
                                                                                    }
                                                                                    }





                                                                                    share|improve this answer

















                                                                                    • 1




                                                                                      It does not hurt to add an explanation to the code.
                                                                                      – Tunaki
                                                                                      Feb 23 '15 at 22:42













                                                                                    up vote
                                                                                    0
                                                                                    down vote










                                                                                    up vote
                                                                                    0
                                                                                    down vote









                                                                                    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<String> allOutPuts = new ArrayList<String>();
                                                                                    TreeMap<Integer, Set> map = new TreeMap<Integer, Set>();
                                                                                    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<Character> set = new LinkedHashSet<Character>();
                                                                                    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<Character>(input.charAt(i));
                                                                                    }

                                                                                    }

                                                                                    return longestString;
                                                                                    }

                                                                                    private static String getStringFromSet(Set<Character> set) {

                                                                                    Object charArr = set.toArray();

                                                                                    StringBuffer strBuff = new StringBuffer();
                                                                                    for (Object obj : charArr) {
                                                                                    strBuff.append(obj);

                                                                                    }

                                                                                    return strBuff.toString();
                                                                                    }
                                                                                    }





                                                                                    share|improve this answer












                                                                                    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<String> allOutPuts = new ArrayList<String>();
                                                                                    TreeMap<Integer, Set> map = new TreeMap<Integer, Set>();
                                                                                    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<Character> set = new LinkedHashSet<Character>();
                                                                                    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<Character>(input.charAt(i));
                                                                                    }

                                                                                    }

                                                                                    return longestString;
                                                                                    }

                                                                                    private static String getStringFromSet(Set<Character> set) {

                                                                                    Object charArr = set.toArray();

                                                                                    StringBuffer strBuff = new StringBuffer();
                                                                                    for (Object obj : charArr) {
                                                                                    strBuff.append(obj);

                                                                                    }

                                                                                    return strBuff.toString();
                                                                                    }
                                                                                    }






                                                                                    share|improve this answer












                                                                                    share|improve this answer



                                                                                    share|improve this answer










                                                                                    answered Feb 23 '15 at 22:34







                                                                                    user4598963















                                                                                    • 1




                                                                                      It does not hurt to add an explanation to the code.
                                                                                      – Tunaki
                                                                                      Feb 23 '15 at 22:42














                                                                                    • 1




                                                                                      It does not hurt to add an explanation to the code.
                                                                                      – Tunaki
                                                                                      Feb 23 '15 at 22:42








                                                                                    1




                                                                                    1




                                                                                    It does not hurt to add an explanation to the code.
                                                                                    – Tunaki
                                                                                    Feb 23 '15 at 22:42




                                                                                    It does not hurt to add an explanation to the code.
                                                                                    – Tunaki
                                                                                    Feb 23 '15 at 22:42










                                                                                    up vote
                                                                                    0
                                                                                    down vote













                                                                                    This is my solution, and it was accepted by leetcode. However, after I saw the stats, I saw whole lot solutions has much faster result....meaning, my solution is around 600ms for all their test cases, and most of the js solutions are around 200 -300 ms bracket.. who can tell me why my solution is slowwww??






                                                                                    var lengthOfLongestSubstring = function(s) {
                                                                                    var arr = s.split("");

                                                                                    if (s.length === 0 || s.length === 1) {
                                                                                    return s.length;
                                                                                    }

                                                                                    var head = 0,
                                                                                    tail = 1;
                                                                                    var str = arr[head];
                                                                                    var maxL = 0;
                                                                                    while (tail < arr.length) {
                                                                                    if (str.indexOf(arr[tail]) == -1) {
                                                                                    str += arr[tail];
                                                                                    maxL = Math.max(maxL, str.length);
                                                                                    tail++;
                                                                                    } else {
                                                                                    maxL = Math.max(maxL, str.length);
                                                                                    head = head + str.indexOf(arr[tail]) + 1;
                                                                                    str = arr[head];
                                                                                    tail = head + 1;
                                                                                    }
                                                                                    }
                                                                                    return maxL;
                                                                                    };








                                                                                    share|improve this answer

























                                                                                      up vote
                                                                                      0
                                                                                      down vote













                                                                                      This is my solution, and it was accepted by leetcode. However, after I saw the stats, I saw whole lot solutions has much faster result....meaning, my solution is around 600ms for all their test cases, and most of the js solutions are around 200 -300 ms bracket.. who can tell me why my solution is slowwww??






                                                                                      var lengthOfLongestSubstring = function(s) {
                                                                                      var arr = s.split("");

                                                                                      if (s.length === 0 || s.length === 1) {
                                                                                      return s.length;
                                                                                      }

                                                                                      var head = 0,
                                                                                      tail = 1;
                                                                                      var str = arr[head];
                                                                                      var maxL = 0;
                                                                                      while (tail < arr.length) {
                                                                                      if (str.indexOf(arr[tail]) == -1) {
                                                                                      str += arr[tail];
                                                                                      maxL = Math.max(maxL, str.length);
                                                                                      tail++;
                                                                                      } else {
                                                                                      maxL = Math.max(maxL, str.length);
                                                                                      head = head + str.indexOf(arr[tail]) + 1;
                                                                                      str = arr[head];
                                                                                      tail = head + 1;
                                                                                      }
                                                                                      }
                                                                                      return maxL;
                                                                                      };








                                                                                      share|improve this answer























                                                                                        up vote
                                                                                        0
                                                                                        down vote










                                                                                        up vote
                                                                                        0
                                                                                        down vote









                                                                                        This is my solution, and it was accepted by leetcode. However, after I saw the stats, I saw whole lot solutions has much faster result....meaning, my solution is around 600ms for all their test cases, and most of the js solutions are around 200 -300 ms bracket.. who can tell me why my solution is slowwww??






                                                                                        var lengthOfLongestSubstring = function(s) {
                                                                                        var arr = s.split("");

                                                                                        if (s.length === 0 || s.length === 1) {
                                                                                        return s.length;
                                                                                        }

                                                                                        var head = 0,
                                                                                        tail = 1;
                                                                                        var str = arr[head];
                                                                                        var maxL = 0;
                                                                                        while (tail < arr.length) {
                                                                                        if (str.indexOf(arr[tail]) == -1) {
                                                                                        str += arr[tail];
                                                                                        maxL = Math.max(maxL, str.length);
                                                                                        tail++;
                                                                                        } else {
                                                                                        maxL = Math.max(maxL, str.length);
                                                                                        head = head + str.indexOf(arr[tail]) + 1;
                                                                                        str = arr[head];
                                                                                        tail = head + 1;
                                                                                        }
                                                                                        }
                                                                                        return maxL;
                                                                                        };








                                                                                        share|improve this answer












                                                                                        This is my solution, and it was accepted by leetcode. However, after I saw the stats, I saw whole lot solutions has much faster result....meaning, my solution is around 600ms for all their test cases, and most of the js solutions are around 200 -300 ms bracket.. who can tell me why my solution is slowwww??






                                                                                        var lengthOfLongestSubstring = function(s) {
                                                                                        var arr = s.split("");

                                                                                        if (s.length === 0 || s.length === 1) {
                                                                                        return s.length;
                                                                                        }

                                                                                        var head = 0,
                                                                                        tail = 1;
                                                                                        var str = arr[head];
                                                                                        var maxL = 0;
                                                                                        while (tail < arr.length) {
                                                                                        if (str.indexOf(arr[tail]) == -1) {
                                                                                        str += arr[tail];
                                                                                        maxL = Math.max(maxL, str.length);
                                                                                        tail++;
                                                                                        } else {
                                                                                        maxL = Math.max(maxL, str.length);
                                                                                        head = head + str.indexOf(arr[tail]) + 1;
                                                                                        str = arr[head];
                                                                                        tail = head + 1;
                                                                                        }
                                                                                        }
                                                                                        return maxL;
                                                                                        };








                                                                                        var lengthOfLongestSubstring = function(s) {
                                                                                        var arr = s.split("");

                                                                                        if (s.length === 0 || s.length === 1) {
                                                                                        return s.length;
                                                                                        }

                                                                                        var head = 0,
                                                                                        tail = 1;
                                                                                        var str = arr[head];
                                                                                        var maxL = 0;
                                                                                        while (tail < arr.length) {
                                                                                        if (str.indexOf(arr[tail]) == -1) {
                                                                                        str += arr[tail];
                                                                                        maxL = Math.max(maxL, str.length);
                                                                                        tail++;
                                                                                        } else {
                                                                                        maxL = Math.max(maxL, str.length);
                                                                                        head = head + str.indexOf(arr[tail]) + 1;
                                                                                        str = arr[head];
                                                                                        tail = head + 1;
                                                                                        }
                                                                                        }
                                                                                        return maxL;
                                                                                        };





                                                                                        var lengthOfLongestSubstring = function(s) {
                                                                                        var arr = s.split("");

                                                                                        if (s.length === 0 || s.length === 1) {
                                                                                        return s.length;
                                                                                        }

                                                                                        var head = 0,
                                                                                        tail = 1;
                                                                                        var str = arr[head];
                                                                                        var maxL = 0;
                                                                                        while (tail < arr.length) {
                                                                                        if (str.indexOf(arr[tail]) == -1) {
                                                                                        str += arr[tail];
                                                                                        maxL = Math.max(maxL, str.length);
                                                                                        tail++;
                                                                                        } else {
                                                                                        maxL = Math.max(maxL, str.length);
                                                                                        head = head + str.indexOf(arr[tail]) + 1;
                                                                                        str = arr[head];
                                                                                        tail = head + 1;
                                                                                        }
                                                                                        }
                                                                                        return maxL;
                                                                                        };






                                                                                        share|improve this answer












                                                                                        share|improve this answer



                                                                                        share|improve this answer










                                                                                        answered May 8 '15 at 6:44









                                                                                        snailclimbingtree

                                                                                        47117




                                                                                        47117






















                                                                                            up vote
                                                                                            0
                                                                                            down vote













                                                                                            I am posting O(n^2) in python . I just want to know whether the technique mentioned by Karoly Horvath has any steps that are similar to existing search/sort algorithms ?



                                                                                            My code :



                                                                                            def main():
                                                                                            test='stackoverflow'
                                                                                            tempstr=''
                                                                                            maxlen,index=0,0
                                                                                            indexsubstring=''
                                                                                            print 'Original string is =%snn' %test

                                                                                            while(index!=len(test)):
                                                                                            for char in test[index:]:
                                                                                            if char not in tempstr:
                                                                                            tempstr+=char
                                                                                            if len(tempstr)> len(indexsubstring):
                                                                                            indexsubstring=tempstr
                                                                                            elif (len(tempstr)>=maxlen):
                                                                                            maxlen=len(tempstr)
                                                                                            indexsubstring=tempstr
                                                                                            break
                                                                                            tempstr=''
                                                                                            print 'max substring length till iteration with starting index =%s is %s'%(test[index],indexsubstring)
                                                                                            index+=1

                                                                                            if __name__=='__main__':
                                                                                            main()





                                                                                            share|improve this answer

























                                                                                              up vote
                                                                                              0
                                                                                              down vote













                                                                                              I am posting O(n^2) in python . I just want to know whether the technique mentioned by Karoly Horvath has any steps that are similar to existing search/sort algorithms ?



                                                                                              My code :



                                                                                              def main():
                                                                                              test='stackoverflow'
                                                                                              tempstr=''
                                                                                              maxlen,index=0,0
                                                                                              indexsubstring=''
                                                                                              print 'Original string is =%snn' %test

                                                                                              while(index!=len(test)):
                                                                                              for char in test[index:]:
                                                                                              if char not in tempstr:
                                                                                              tempstr+=char
                                                                                              if len(tempstr)> len(indexsubstring):
                                                                                              indexsubstring=tempstr
                                                                                              elif (len(tempstr)>=maxlen):
                                                                                              maxlen=len(tempstr)
                                                                                              indexsubstring=tempstr
                                                                                              break
                                                                                              tempstr=''
                                                                                              print 'max substring length till iteration with starting index =%s is %s'%(test[index],indexsubstring)
                                                                                              index+=1

                                                                                              if __name__=='__main__':
                                                                                              main()





                                                                                              share|improve this answer























                                                                                                up vote
                                                                                                0
                                                                                                down vote










                                                                                                up vote
                                                                                                0
                                                                                                down vote









                                                                                                I am posting O(n^2) in python . I just want to know whether the technique mentioned by Karoly Horvath has any steps that are similar to existing search/sort algorithms ?



                                                                                                My code :



                                                                                                def main():
                                                                                                test='stackoverflow'
                                                                                                tempstr=''
                                                                                                maxlen,index=0,0
                                                                                                indexsubstring=''
                                                                                                print 'Original string is =%snn' %test

                                                                                                while(index!=len(test)):
                                                                                                for char in test[index:]:
                                                                                                if char not in tempstr:
                                                                                                tempstr+=char
                                                                                                if len(tempstr)> len(indexsubstring):
                                                                                                indexsubstring=tempstr
                                                                                                elif (len(tempstr)>=maxlen):
                                                                                                maxlen=len(tempstr)
                                                                                                indexsubstring=tempstr
                                                                                                break
                                                                                                tempstr=''
                                                                                                print 'max substring length till iteration with starting index =%s is %s'%(test[index],indexsubstring)
                                                                                                index+=1

                                                                                                if __name__=='__main__':
                                                                                                main()





                                                                                                share|improve this answer












                                                                                                I am posting O(n^2) in python . I just want to know whether the technique mentioned by Karoly Horvath has any steps that are similar to existing search/sort algorithms ?



                                                                                                My code :



                                                                                                def main():
                                                                                                test='stackoverflow'
                                                                                                tempstr=''
                                                                                                maxlen,index=0,0
                                                                                                indexsubstring=''
                                                                                                print 'Original string is =%snn' %test

                                                                                                while(index!=len(test)):
                                                                                                for char in test[index:]:
                                                                                                if char not in tempstr:
                                                                                                tempstr+=char
                                                                                                if len(tempstr)> len(indexsubstring):
                                                                                                indexsubstring=tempstr
                                                                                                elif (len(tempstr)>=maxlen):
                                                                                                maxlen=len(tempstr)
                                                                                                indexsubstring=tempstr
                                                                                                break
                                                                                                tempstr=''
                                                                                                print 'max substring length till iteration with starting index =%s is %s'%(test[index],indexsubstring)
                                                                                                index+=1

                                                                                                if __name__=='__main__':
                                                                                                main()






                                                                                                share|improve this answer












                                                                                                share|improve this answer



                                                                                                share|improve this answer










                                                                                                answered Jun 27 '15 at 10:18









                                                                                                user2582651

                                                                                                636




                                                                                                636






















                                                                                                    up vote
                                                                                                    0
                                                                                                    down vote













                                                                                                    Simple and Easy



                                                                                                    import java.util.Scanner;

                                                                                                    public class longestsub {

                                                                                                    static Scanner sn = new Scanner(System.in);
                                                                                                    static String word = sn.nextLine();

                                                                                                    public static void main(String args) {
                                                                                                    System.out.println("The Length is " +check(word));
                                                                                                    }
                                                                                                    private static int check(String word) {
                                                                                                    String store="";
                                                                                                    for (int i = 0; i < word.length(); i++) {
                                                                                                    if (store.indexOf(word.charAt(i))<0) {
                                                                                                    store = store+word.charAt(i);
                                                                                                    }
                                                                                                    }
                                                                                                    System.out.println("Result word " +store);
                                                                                                    return store.length();
                                                                                                    }

                                                                                                    }





                                                                                                    share|improve this answer

























                                                                                                      up vote
                                                                                                      0
                                                                                                      down vote













                                                                                                      Simple and Easy



                                                                                                      import java.util.Scanner;

                                                                                                      public class longestsub {

                                                                                                      static Scanner sn = new Scanner(System.in);
                                                                                                      static String word = sn.nextLine();

                                                                                                      public static void main(String args) {
                                                                                                      System.out.println("The Length is " +check(word));
                                                                                                      }
                                                                                                      private static int check(String word) {
                                                                                                      String store="";
                                                                                                      for (int i = 0; i < word.length(); i++) {
                                                                                                      if (store.indexOf(word.charAt(i))<0) {
                                                                                                      store = store+word.charAt(i);
                                                                                                      }
                                                                                                      }
                                                                                                      System.out.println("Result word " +store);
                                                                                                      return store.length();
                                                                                                      }

                                                                                                      }





                                                                                                      share|improve this answer























                                                                                                        up vote
                                                                                                        0
                                                                                                        down vote










                                                                                                        up vote
                                                                                                        0
                                                                                                        down vote









                                                                                                        Simple and Easy



                                                                                                        import java.util.Scanner;

                                                                                                        public class longestsub {

                                                                                                        static Scanner sn = new Scanner(System.in);
                                                                                                        static String word = sn.nextLine();

                                                                                                        public static void main(String args) {
                                                                                                        System.out.println("The Length is " +check(word));
                                                                                                        }
                                                                                                        private static int check(String word) {
                                                                                                        String store="";
                                                                                                        for (int i = 0; i < word.length(); i++) {
                                                                                                        if (store.indexOf(word.charAt(i))<0) {
                                                                                                        store = store+word.charAt(i);
                                                                                                        }
                                                                                                        }
                                                                                                        System.out.println("Result word " +store);
                                                                                                        return store.length();
                                                                                                        }

                                                                                                        }





                                                                                                        share|improve this answer












                                                                                                        Simple and Easy



                                                                                                        import java.util.Scanner;

                                                                                                        public class longestsub {

                                                                                                        static Scanner sn = new Scanner(System.in);
                                                                                                        static String word = sn.nextLine();

                                                                                                        public static void main(String args) {
                                                                                                        System.out.println("The Length is " +check(word));
                                                                                                        }
                                                                                                        private static int check(String word) {
                                                                                                        String store="";
                                                                                                        for (int i = 0; i < word.length(); i++) {
                                                                                                        if (store.indexOf(word.charAt(i))<0) {
                                                                                                        store = store+word.charAt(i);
                                                                                                        }
                                                                                                        }
                                                                                                        System.out.println("Result word " +store);
                                                                                                        return store.length();
                                                                                                        }

                                                                                                        }






                                                                                                        share|improve this answer












                                                                                                        share|improve this answer



                                                                                                        share|improve this answer










                                                                                                        answered Oct 11 '15 at 6:49









                                                                                                        Sai Kiran

                                                                                                        3,48294470




                                                                                                        3,48294470






















                                                                                                            up vote
                                                                                                            0
                                                                                                            down vote













                                                                                                            Not quite optimized but simple answer in Python



                                                                                                            def lengthOfLongestSubstring(s):
                                                                                                            temp,maxlen,newstart = {},0,0
                                                                                                            for i,x in enumerate(s):
                                                                                                            if x in temp:
                                                                                                            newstart = max(newstart,s[:i].rfind(x)+1)
                                                                                                            else:
                                                                                                            temp[x] = 1
                                                                                                            maxlen = max(maxlen, len(s[newstart:i + 1]))
                                                                                                            return maxlen


                                                                                                            I think the costly affair is rfind which is why it's not quite optimized.






                                                                                                            share|improve this answer

























                                                                                                              up vote
                                                                                                              0
                                                                                                              down vote













                                                                                                              Not quite optimized but simple answer in Python



                                                                                                              def lengthOfLongestSubstring(s):
                                                                                                              temp,maxlen,newstart = {},0,0
                                                                                                              for i,x in enumerate(s):
                                                                                                              if x in temp:
                                                                                                              newstart = max(newstart,s[:i].rfind(x)+1)
                                                                                                              else:
                                                                                                              temp[x] = 1
                                                                                                              maxlen = max(maxlen, len(s[newstart:i + 1]))
                                                                                                              return maxlen


                                                                                                              I think the costly affair is rfind which is why it's not quite optimized.






                                                                                                              share|improve this answer























                                                                                                                up vote
                                                                                                                0
                                                                                                                down vote










                                                                                                                up vote
                                                                                                                0
                                                                                                                down vote









                                                                                                                Not quite optimized but simple answer in Python



                                                                                                                def lengthOfLongestSubstring(s):
                                                                                                                temp,maxlen,newstart = {},0,0
                                                                                                                for i,x in enumerate(s):
                                                                                                                if x in temp:
                                                                                                                newstart = max(newstart,s[:i].rfind(x)+1)
                                                                                                                else:
                                                                                                                temp[x] = 1
                                                                                                                maxlen = max(maxlen, len(s[newstart:i + 1]))
                                                                                                                return maxlen


                                                                                                                I think the costly affair is rfind which is why it's not quite optimized.






                                                                                                                share|improve this answer












                                                                                                                Not quite optimized but simple answer in Python



                                                                                                                def lengthOfLongestSubstring(s):
                                                                                                                temp,maxlen,newstart = {},0,0
                                                                                                                for i,x in enumerate(s):
                                                                                                                if x in temp:
                                                                                                                newstart = max(newstart,s[:i].rfind(x)+1)
                                                                                                                else:
                                                                                                                temp[x] = 1
                                                                                                                maxlen = max(maxlen, len(s[newstart:i + 1]))
                                                                                                                return maxlen


                                                                                                                I think the costly affair is rfind which is why it's not quite optimized.







                                                                                                                share|improve this answer












                                                                                                                share|improve this answer



                                                                                                                share|improve this answer










                                                                                                                answered Apr 19 '16 at 9:02









                                                                                                                Maulik

                                                                                                                283




                                                                                                                283






















                                                                                                                    up vote
                                                                                                                    0
                                                                                                                    down vote













                                                                                                                    Tested and working. For easy understanding, I suppose there's a drawer to put the letters.



                                                                                                                    public int lengthOfLongestSubstring(String s) {
                                                                                                                    int maxlen = 0;
                                                                                                                    int start = 0;
                                                                                                                    int end = 0;
                                                                                                                    HashSet<Character> drawer = new HashSet<Character>();
                                                                                                                    for (int i=0; i<s.length(); i++) {
                                                                                                                    char ch = s.charAt(i);
                                                                                                                    if (drawer.contains(ch)) {
                                                                                                                    //search for ch between start and end
                                                                                                                    while (s.charAt(start)!=ch) {
                                                                                                                    //drop letter from drawer
                                                                                                                    drawer.remove(s.charAt(start));
                                                                                                                    start++;
                                                                                                                    }
                                                                                                                    //Do not remove from drawer actual char (it's the new recently found)
                                                                                                                    start++;
                                                                                                                    end++;
                                                                                                                    }
                                                                                                                    else {
                                                                                                                    drawer.add(ch);
                                                                                                                    end++;
                                                                                                                    int _maxlen = end-start;
                                                                                                                    if (_maxlen>maxlen) {
                                                                                                                    maxlen=_maxlen;
                                                                                                                    }
                                                                                                                    }
                                                                                                                    }
                                                                                                                    return maxlen;
                                                                                                                    }





                                                                                                                    share|improve this answer

























                                                                                                                      up vote
                                                                                                                      0
                                                                                                                      down vote













                                                                                                                      Tested and working. For easy understanding, I suppose there's a drawer to put the letters.



                                                                                                                      public int lengthOfLongestSubstring(String s) {
                                                                                                                      int maxlen = 0;
                                                                                                                      int start = 0;
                                                                                                                      int end = 0;
                                                                                                                      HashSet<Character> drawer = new HashSet<Character>();
                                                                                                                      for (int i=0; i<s.length(); i++) {
                                                                                                                      char ch = s.charAt(i);
                                                                                                                      if (drawer.contains(ch)) {
                                                                                                                      //search for ch between start and end
                                                                                                                      while (s.charAt(start)!=ch) {
                                                                                                                      //drop letter from drawer
                                                                                                                      drawer.remove(s.charAt(start));
                                                                                                                      start++;
                                                                                                                      }
                                                                                                                      //Do not remove from drawer actual char (it's the new recently found)
                                                                                                                      start++;
                                                                                                                      end++;
                                                                                                                      }
                                                                                                                      else {
                                                                                                                      drawer.add(ch);
                                                                                                                      end++;
                                                                                                                      int _maxlen = end-start;
                                                                                                                      if (_maxlen>maxlen) {
                                                                                                                      maxlen=_maxlen;
                                                                                                                      }
                                                                                                                      }
                                                                                                                      }
                                                                                                                      return maxlen;
                                                                                                                      }





                                                                                                                      share|improve this answer























                                                                                                                        up vote
                                                                                                                        0
                                                                                                                        down vote










                                                                                                                        up vote
                                                                                                                        0
                                                                                                                        down vote









                                                                                                                        Tested and working. For easy understanding, I suppose there's a drawer to put the letters.



                                                                                                                        public int lengthOfLongestSubstring(String s) {
                                                                                                                        int maxlen = 0;
                                                                                                                        int start = 0;
                                                                                                                        int end = 0;
                                                                                                                        HashSet<Character> drawer = new HashSet<Character>();
                                                                                                                        for (int i=0; i<s.length(); i++) {
                                                                                                                        char ch = s.charAt(i);
                                                                                                                        if (drawer.contains(ch)) {
                                                                                                                        //search for ch between start and end
                                                                                                                        while (s.charAt(start)!=ch) {
                                                                                                                        //drop letter from drawer
                                                                                                                        drawer.remove(s.charAt(start));
                                                                                                                        start++;
                                                                                                                        }
                                                                                                                        //Do not remove from drawer actual char (it's the new recently found)
                                                                                                                        start++;
                                                                                                                        end++;
                                                                                                                        }
                                                                                                                        else {
                                                                                                                        drawer.add(ch);
                                                                                                                        end++;
                                                                                                                        int _maxlen = end-start;
                                                                                                                        if (_maxlen>maxlen) {
                                                                                                                        maxlen=_maxlen;
                                                                                                                        }
                                                                                                                        }
                                                                                                                        }
                                                                                                                        return maxlen;
                                                                                                                        }





                                                                                                                        share|improve this answer












                                                                                                                        Tested and working. For easy understanding, I suppose there's a drawer to put the letters.



                                                                                                                        public int lengthOfLongestSubstring(String s) {
                                                                                                                        int maxlen = 0;
                                                                                                                        int start = 0;
                                                                                                                        int end = 0;
                                                                                                                        HashSet<Character> drawer = new HashSet<Character>();
                                                                                                                        for (int i=0; i<s.length(); i++) {
                                                                                                                        char ch = s.charAt(i);
                                                                                                                        if (drawer.contains(ch)) {
                                                                                                                        //search for ch between start and end
                                                                                                                        while (s.charAt(start)!=ch) {
                                                                                                                        //drop letter from drawer
                                                                                                                        drawer.remove(s.charAt(start));
                                                                                                                        start++;
                                                                                                                        }
                                                                                                                        //Do not remove from drawer actual char (it's the new recently found)
                                                                                                                        start++;
                                                                                                                        end++;
                                                                                                                        }
                                                                                                                        else {
                                                                                                                        drawer.add(ch);
                                                                                                                        end++;
                                                                                                                        int _maxlen = end-start;
                                                                                                                        if (_maxlen>maxlen) {
                                                                                                                        maxlen=_maxlen;
                                                                                                                        }
                                                                                                                        }
                                                                                                                        }
                                                                                                                        return maxlen;
                                                                                                                        }






                                                                                                                        share|improve this answer












                                                                                                                        share|improve this answer



                                                                                                                        share|improve this answer










                                                                                                                        answered Jul 17 '16 at 16:56









                                                                                                                        Christian Oviedo Gabarda

                                                                                                                        13




                                                                                                                        13






















                                                                                                                            up vote
                                                                                                                            0
                                                                                                                            down vote













                                                                                                                            Another O(n) JavaScript solution. It does not alter strings during the looping; it just keeps track of the offset and length of the longest sub string so far:






                                                                                                                            function longest(str) {
                                                                                                                            var hash = {}, start, end, bestStart, best;
                                                                                                                            start = end = bestStart = best = 0;
                                                                                                                            while (end < str.length) {
                                                                                                                            while (hash[str[end]]) hash[str[start++]] = 0;
                                                                                                                            hash[str[end]] = 1;
                                                                                                                            if (++end - start > best) bestStart = start, best = end - start;
                                                                                                                            }
                                                                                                                            return str.substr(bestStart, best);
                                                                                                                            }

                                                                                                                            // I/O for snippet
                                                                                                                            document.querySelector('input').addEventListener('input', function () {
                                                                                                                            document.querySelector('span').textContent = longest(this.value);
                                                                                                                            });

                                                                                                                            Enter word:<input><br>
                                                                                                                            Longest: <span></span>








                                                                                                                            share|improve this answer

























                                                                                                                              up vote
                                                                                                                              0
                                                                                                                              down vote













                                                                                                                              Another O(n) JavaScript solution. It does not alter strings during the looping; it just keeps track of the offset and length of the longest sub string so far:






                                                                                                                              function longest(str) {
                                                                                                                              var hash = {}, start, end, bestStart, best;
                                                                                                                              start = end = bestStart = best = 0;
                                                                                                                              while (end < str.length) {
                                                                                                                              while (hash[str[end]]) hash[str[start++]] = 0;
                                                                                                                              hash[str[end]] = 1;
                                                                                                                              if (++end - start > best) bestStart = start, best = end - start;
                                                                                                                              }
                                                                                                                              return str.substr(bestStart, best);
                                                                                                                              }

                                                                                                                              // I/O for snippet
                                                                                                                              document.querySelector('input').addEventListener('input', function () {
                                                                                                                              document.querySelector('span').textContent = longest(this.value);
                                                                                                                              });

                                                                                                                              Enter word:<input><br>
                                                                                                                              Longest: <span></span>








                                                                                                                              share|improve this answer























                                                                                                                                up vote
                                                                                                                                0
                                                                                                                                down vote










                                                                                                                                up vote
                                                                                                                                0
                                                                                                                                down vote









                                                                                                                                Another O(n) JavaScript solution. It does not alter strings during the looping; it just keeps track of the offset and length of the longest sub string so far:






                                                                                                                                function longest(str) {
                                                                                                                                var hash = {}, start, end, bestStart, best;
                                                                                                                                start = end = bestStart = best = 0;
                                                                                                                                while (end < str.length) {
                                                                                                                                while (hash[str[end]]) hash[str[start++]] = 0;
                                                                                                                                hash[str[end]] = 1;
                                                                                                                                if (++end - start > best) bestStart = start, best = end - start;
                                                                                                                                }
                                                                                                                                return str.substr(bestStart, best);
                                                                                                                                }

                                                                                                                                // I/O for snippet
                                                                                                                                document.querySelector('input').addEventListener('input', function () {
                                                                                                                                document.querySelector('span').textContent = longest(this.value);
                                                                                                                                });

                                                                                                                                Enter word:<input><br>
                                                                                                                                Longest: <span></span>








                                                                                                                                share|improve this answer












                                                                                                                                Another O(n) JavaScript solution. It does not alter strings during the looping; it just keeps track of the offset and length of the longest sub string so far:






                                                                                                                                function longest(str) {
                                                                                                                                var hash = {}, start, end, bestStart, best;
                                                                                                                                start = end = bestStart = best = 0;
                                                                                                                                while (end < str.length) {
                                                                                                                                while (hash[str[end]]) hash[str[start++]] = 0;
                                                                                                                                hash[str[end]] = 1;
                                                                                                                                if (++end - start > best) bestStart = start, best = end - start;
                                                                                                                                }
                                                                                                                                return str.substr(bestStart, best);
                                                                                                                                }

                                                                                                                                // I/O for snippet
                                                                                                                                document.querySelector('input').addEventListener('input', function () {
                                                                                                                                document.querySelector('span').textContent = longest(this.value);
                                                                                                                                });

                                                                                                                                Enter word:<input><br>
                                                                                                                                Longest: <span></span>








                                                                                                                                function longest(str) {
                                                                                                                                var hash = {}, start, end, bestStart, best;
                                                                                                                                start = end = bestStart = best = 0;
                                                                                                                                while (end < str.length) {
                                                                                                                                while (hash[str[end]]) hash[str[start++]] = 0;
                                                                                                                                hash[str[end]] = 1;
                                                                                                                                if (++end - start > best) bestStart = start, best = end - start;
                                                                                                                                }
                                                                                                                                return str.substr(bestStart, best);
                                                                                                                                }

                                                                                                                                // I/O for snippet
                                                                                                                                document.querySelector('input').addEventListener('input', function () {
                                                                                                                                document.querySelector('span').textContent = longest(this.value);
                                                                                                                                });

                                                                                                                                Enter word:<input><br>
                                                                                                                                Longest: <span></span>





                                                                                                                                function longest(str) {
                                                                                                                                var hash = {}, start, end, bestStart, best;
                                                                                                                                start = end = bestStart = best = 0;
                                                                                                                                while (end < str.length) {
                                                                                                                                while (hash[str[end]]) hash[str[start++]] = 0;
                                                                                                                                hash[str[end]] = 1;
                                                                                                                                if (++end - start > best) bestStart = start, best = end - start;
                                                                                                                                }
                                                                                                                                return str.substr(bestStart, best);
                                                                                                                                }

                                                                                                                                // I/O for snippet
                                                                                                                                document.querySelector('input').addEventListener('input', function () {
                                                                                                                                document.querySelector('span').textContent = longest(this.value);
                                                                                                                                });

                                                                                                                                Enter word:<input><br>
                                                                                                                                Longest: <span></span>






                                                                                                                                share|improve this answer












                                                                                                                                share|improve this answer



                                                                                                                                share|improve this answer










                                                                                                                                answered Jul 17 '16 at 19:58









                                                                                                                                trincot

                                                                                                                                113k1477109




                                                                                                                                113k1477109






















                                                                                                                                    up vote
                                                                                                                                    0
                                                                                                                                    down vote













                                                                                                                                    This is my solution. Hope it helps.



                                                                                                                                      function longestSubstringWithoutDuplication(str) {
                                                                                                                                    var max = 0;

                                                                                                                                    //if empty string
                                                                                                                                    if (str.length === 0){
                                                                                                                                    return 0;
                                                                                                                                    } else if (str.length === 1){ //case if the string's length is 1
                                                                                                                                    return 1;
                                                                                                                                    }

                                                                                                                                    //loop over all the chars in the strings
                                                                                                                                    var currentChar,
                                                                                                                                    map = {},
                                                                                                                                    counter = 0; //count the number of char in each substring without duplications
                                                                                                                                    for (var i=0; i< str.length ; i++){
                                                                                                                                    currentChar = str.charAt(i);

                                                                                                                                    //if the current char is not in the map
                                                                                                                                    if (map[currentChar] == undefined){
                                                                                                                                    //push the currentChar to the map
                                                                                                                                    map[currentChar] = i;
                                                                                                                                    if (Object.keys(map).length > max){
                                                                                                                                    max = Object.keys(map).length;
                                                                                                                                    }
                                                                                                                                    } else { //there is duplacation
                                                                                                                                    //update the max
                                                                                                                                    if (Object.keys(map).length > max){
                                                                                                                                    max = Object.keys(map).length;
                                                                                                                                    }
                                                                                                                                    counter = 0; //initilize the counter to count next substring
                                                                                                                                    i = map[currentChar]; //start from the duplicated char
                                                                                                                                    map = {}; // clean the map
                                                                                                                                    }
                                                                                                                                    }


                                                                                                                                    return max;
                                                                                                                                    }





                                                                                                                                    share|improve this answer





















                                                                                                                                    • Care to elaborate on how this solves the OP's problem?
                                                                                                                                      – RamenChef
                                                                                                                                      Nov 9 '16 at 18:12















                                                                                                                                    up vote
                                                                                                                                    0
                                                                                                                                    down vote













                                                                                                                                    This is my solution. Hope it helps.



                                                                                                                                      function longestSubstringWithoutDuplication(str) {
                                                                                                                                    var max = 0;

                                                                                                                                    //if empty string
                                                                                                                                    if (str.length === 0){
                                                                                                                                    return 0;
                                                                                                                                    } else if (str.length === 1){ //case if the string's length is 1
                                                                                                                                    return 1;
                                                                                                                                    }

                                                                                                                                    //loop over all the chars in the strings
                                                                                                                                    var currentChar,
                                                                                                                                    map = {},
                                                                                                                                    counter = 0; //count the number of char in each substring without duplications
                                                                                                                                    for (var i=0; i< str.length ; i++){
                                                                                                                                    currentChar = str.charAt(i);

                                                                                                                                    //if the current char is not in the map
                                                                                                                                    if (map[currentChar] == undefined){
                                                                                                                                    //push the currentChar to the map
                                                                                                                                    map[currentChar] = i;
                                                                                                                                    if (Object.keys(map).length > max){
                                                                                                                                    max = Object.keys(map).length;
                                                                                                                                    }
                                                                                                                                    } else { //there is duplacation
                                                                                                                                    //update the max
                                                                                                                                    if (Object.keys(map).length > max){
                                                                                                                                    max = Object.keys(map).length;
                                                                                                                                    }
                                                                                                                                    counter = 0; //initilize the counter to count next substring
                                                                                                                                    i = map[currentChar]; //start from the duplicated char
                                                                                                                                    map = {}; // clean the map
                                                                                                                                    }
                                                                                                                                    }


                                                                                                                                    return max;
                                                                                                                                    }





                                                                                                                                    share|improve this answer





















                                                                                                                                    • Care to elaborate on how this solves the OP's problem?
                                                                                                                                      – RamenChef
                                                                                                                                      Nov 9 '16 at 18:12













                                                                                                                                    up vote
                                                                                                                                    0
                                                                                                                                    down vote










                                                                                                                                    up vote
                                                                                                                                    0
                                                                                                                                    down vote









                                                                                                                                    This is my solution. Hope it helps.



                                                                                                                                      function longestSubstringWithoutDuplication(str) {
                                                                                                                                    var max = 0;

                                                                                                                                    //if empty string
                                                                                                                                    if (str.length === 0){
                                                                                                                                    return 0;
                                                                                                                                    } else if (str.length === 1){ //case if the string's length is 1
                                                                                                                                    return 1;
                                                                                                                                    }

                                                                                                                                    //loop over all the chars in the strings
                                                                                                                                    var currentChar,
                                                                                                                                    map = {},
                                                                                                                                    counter = 0; //count the number of char in each substring without duplications
                                                                                                                                    for (var i=0; i< str.length ; i++){
                                                                                                                                    currentChar = str.charAt(i);

                                                                                                                                    //if the current char is not in the map
                                                                                                                                    if (map[currentChar] == undefined){
                                                                                                                                    //push the currentChar to the map
                                                                                                                                    map[currentChar] = i;
                                                                                                                                    if (Object.keys(map).length > max){
                                                                                                                                    max = Object.keys(map).length;
                                                                                                                                    }
                                                                                                                                    } else { //there is duplacation
                                                                                                                                    //update the max
                                                                                                                                    if (Object.keys(map).length > max){
                                                                                                                                    max = Object.keys(map).length;
                                                                                                                                    }
                                                                                                                                    counter = 0; //initilize the counter to count next substring
                                                                                                                                    i = map[currentChar]; //start from the duplicated char
                                                                                                                                    map = {}; // clean the map
                                                                                                                                    }
                                                                                                                                    }


                                                                                                                                    return max;
                                                                                                                                    }





                                                                                                                                    share|improve this answer












                                                                                                                                    This is my solution. Hope it helps.



                                                                                                                                      function longestSubstringWithoutDuplication(str) {
                                                                                                                                    var max = 0;

                                                                                                                                    //if empty string
                                                                                                                                    if (str.length === 0){
                                                                                                                                    return 0;
                                                                                                                                    } else if (str.length === 1){ //case if the string's length is 1
                                                                                                                                    return 1;
                                                                                                                                    }

                                                                                                                                    //loop over all the chars in the strings
                                                                                                                                    var currentChar,
                                                                                                                                    map = {},
                                                                                                                                    counter = 0; //count the number of char in each substring without duplications
                                                                                                                                    for (var i=0; i< str.length ; i++){
                                                                                                                                    currentChar = str.charAt(i);

                                                                                                                                    //if the current char is not in the map
                                                                                                                                    if (map[currentChar] == undefined){
                                                                                                                                    //push the currentChar to the map
                                                                                                                                    map[currentChar] = i;
                                                                                                                                    if (Object.keys(map).length > max){
                                                                                                                                    max = Object.keys(map).length;
                                                                                                                                    }
                                                                                                                                    } else { //there is duplacation
                                                                                                                                    //update the max
                                                                                                                                    if (Object.keys(map).length > max){
                                                                                                                                    max = Object.keys(map).length;
                                                                                                                                    }
                                                                                                                                    counter = 0; //initilize the counter to count next substring
                                                                                                                                    i = map[currentChar]; //start from the duplicated char
                                                                                                                                    map = {}; // clean the map
                                                                                                                                    }
                                                                                                                                    }


                                                                                                                                    return max;
                                                                                                                                    }






                                                                                                                                    share|improve this answer












                                                                                                                                    share|improve this answer



                                                                                                                                    share|improve this answer










                                                                                                                                    answered Nov 9 '16 at 17:49









                                                                                                                                    Regina Kreimer

                                                                                                                                    317




                                                                                                                                    317












                                                                                                                                    • Care to elaborate on how this solves the OP's problem?
                                                                                                                                      – RamenChef
                                                                                                                                      Nov 9 '16 at 18:12


















                                                                                                                                    • Care to elaborate on how this solves the OP's problem?
                                                                                                                                      – RamenChef
                                                                                                                                      Nov 9 '16 at 18:12
















                                                                                                                                    Care to elaborate on how this solves the OP's problem?
                                                                                                                                    – RamenChef
                                                                                                                                    Nov 9 '16 at 18:12




                                                                                                                                    Care to elaborate on how this solves the OP's problem?
                                                                                                                                    – RamenChef
                                                                                                                                    Nov 9 '16 at 18:12










                                                                                                                                    up vote
                                                                                                                                    0
                                                                                                                                    down vote













                                                                                                                                    here is my javascript and cpp implementations with great details: https://algorithm.pingzhang.io/String/longest_substring_without_repeating_characters.html



                                                                                                                                    We want to find the longest substring without repeating characters. The first thing comes to my mind is that we need a hash table to store every character in a substring so that when a new character comes in, we can easily know whether this character is already in the substring or not. I call it as valueIdxHash. Then, a substring has a startIdx and endIdx. So we need a variable to keep track of the starting index of a substring and I call it as startIdx. Let's assume we are at index i and we already have a substring (startIdx, i - 1). Now, we want to check whether this substring can keep growing or not.



                                                                                                                                    If the valueIdxHash contains str[i], it means it is a repeated character. But we still need to check whether this repeated character is in the substring (startIdx, i - 1). So we need to retrieve the index of str[i] that is appeared last time and then compare this index with startIdx.




                                                                                                                                    • If startIdx is larger, it means the last appeared str[i] is outside of the substring. Thus the subtring can keep growing.

                                                                                                                                    • If startIdx is smaller, it means the last appeared str[i] is within of the substring. Thus, the substring cannot grow any more. startIdx will be updated as valueIdxHash[str[i]] + 1 and the new substring (valueIdxHash[str[i]] + 1, i) has potential to keep growing.


                                                                                                                                    If the valueIdxHash does not contain str[i], the substring can keep growing.






                                                                                                                                    share|improve this answer

























                                                                                                                                      up vote
                                                                                                                                      0
                                                                                                                                      down vote













                                                                                                                                      here is my javascript and cpp implementations with great details: https://algorithm.pingzhang.io/String/longest_substring_without_repeating_characters.html



                                                                                                                                      We want to find the longest substring without repeating characters. The first thing comes to my mind is that we need a hash table to store every character in a substring so that when a new character comes in, we can easily know whether this character is already in the substring or not. I call it as valueIdxHash. Then, a substring has a startIdx and endIdx. So we need a variable to keep track of the starting index of a substring and I call it as startIdx. Let's assume we are at index i and we already have a substring (startIdx, i - 1). Now, we want to check whether this substring can keep growing or not.



                                                                                                                                      If the valueIdxHash contains str[i], it means it is a repeated character. But we still need to check whether this repeated character is in the substring (startIdx, i - 1). So we need to retrieve the index of str[i] that is appeared last time and then compare this index with startIdx.




                                                                                                                                      • If startIdx is larger, it means the last appeared str[i] is outside of the substring. Thus the subtring can keep growing.

                                                                                                                                      • If startIdx is smaller, it means the last appeared str[i] is within of the substring. Thus, the substring cannot grow any more. startIdx will be updated as valueIdxHash[str[i]] + 1 and the new substring (valueIdxHash[str[i]] + 1, i) has potential to keep growing.


                                                                                                                                      If the valueIdxHash does not contain str[i], the substring can keep growing.






                                                                                                                                      share|improve this answer























                                                                                                                                        up vote
                                                                                                                                        0
                                                                                                                                        down vote










                                                                                                                                        up vote
                                                                                                                                        0
                                                                                                                                        down vote









                                                                                                                                        here is my javascript and cpp implementations with great details: https://algorithm.pingzhang.io/String/longest_substring_without_repeating_characters.html



                                                                                                                                        We want to find the longest substring without repeating characters. The first thing comes to my mind is that we need a hash table to store every character in a substring so that when a new character comes in, we can easily know whether this character is already in the substring or not. I call it as valueIdxHash. Then, a substring has a startIdx and endIdx. So we need a variable to keep track of the starting index of a substring and I call it as startIdx. Let's assume we are at index i and we already have a substring (startIdx, i - 1). Now, we want to check whether this substring can keep growing or not.



                                                                                                                                        If the valueIdxHash contains str[i], it means it is a repeated character. But we still need to check whether this repeated character is in the substring (startIdx, i - 1). So we need to retrieve the index of str[i] that is appeared last time and then compare this index with startIdx.




                                                                                                                                        • If startIdx is larger, it means the last appeared str[i] is outside of the substring. Thus the subtring can keep growing.

                                                                                                                                        • If startIdx is smaller, it means the last appeared str[i] is within of the substring. Thus, the substring cannot grow any more. startIdx will be updated as valueIdxHash[str[i]] + 1 and the new substring (valueIdxHash[str[i]] + 1, i) has potential to keep growing.


                                                                                                                                        If the valueIdxHash does not contain str[i], the substring can keep growing.






                                                                                                                                        share|improve this answer












                                                                                                                                        here is my javascript and cpp implementations with great details: https://algorithm.pingzhang.io/String/longest_substring_without_repeating_characters.html



                                                                                                                                        We want to find the longest substring without repeating characters. The first thing comes to my mind is that we need a hash table to store every character in a substring so that when a new character comes in, we can easily know whether this character is already in the substring or not. I call it as valueIdxHash. Then, a substring has a startIdx and endIdx. So we need a variable to keep track of the starting index of a substring and I call it as startIdx. Let's assume we are at index i and we already have a substring (startIdx, i - 1). Now, we want to check whether this substring can keep growing or not.



                                                                                                                                        If the valueIdxHash contains str[i], it means it is a repeated character. But we still need to check whether this repeated character is in the substring (startIdx, i - 1). So we need to retrieve the index of str[i] that is appeared last time and then compare this index with startIdx.




                                                                                                                                        • If startIdx is larger, it means the last appeared str[i] is outside of the substring. Thus the subtring can keep growing.

                                                                                                                                        • If startIdx is smaller, it means the last appeared str[i] is within of the substring. Thus, the substring cannot grow any more. startIdx will be updated as valueIdxHash[str[i]] + 1 and the new substring (valueIdxHash[str[i]] + 1, i) has potential to keep growing.


                                                                                                                                        If the valueIdxHash does not contain str[i], the substring can keep growing.







                                                                                                                                        share|improve this answer












                                                                                                                                        share|improve this answer



                                                                                                                                        share|improve this answer










                                                                                                                                        answered Jan 2 '17 at 2:35









                                                                                                                                        Ping.Goblue

                                                                                                                                        22145




                                                                                                                                        22145






















                                                                                                                                            up vote
                                                                                                                                            0
                                                                                                                                            down vote













                                                                                                                                            I modified my solution to "find the length of the longest substring without repeating characters".



                                                                                                                                                    public string LengthOfLongestSubstring(string s) {
                                                                                                                                            var res = 0;
                                                                                                                                            var dict = new Dictionary<char, int>();
                                                                                                                                            var start = 0;

                                                                                                                                            for(int i =0; i< s.Length; i++)
                                                                                                                                            {
                                                                                                                                            if(dict.ContainsKey(s[i]))
                                                                                                                                            {
                                                                                                                                            start = Math.Max(start, dict[s[i]] + 1); //update start index
                                                                                                                                            dict[s[i]] = i;
                                                                                                                                            }
                                                                                                                                            else
                                                                                                                                            {
                                                                                                                                            dict.Add(s[i], i);
                                                                                                                                            }

                                                                                                                                            res = Math.Max(res, i - start + 1); //track max length
                                                                                                                                            }
                                                                                                                                            return s.Substring(start,res);
                                                                                                                                            }





                                                                                                                                            share|improve this answer

























                                                                                                                                              up vote
                                                                                                                                              0
                                                                                                                                              down vote













                                                                                                                                              I modified my solution to "find the length of the longest substring without repeating characters".



                                                                                                                                                      public string LengthOfLongestSubstring(string s) {
                                                                                                                                              var res = 0;
                                                                                                                                              var dict = new Dictionary<char, int>();
                                                                                                                                              var start = 0;

                                                                                                                                              for(int i =0; i< s.Length; i++)
                                                                                                                                              {
                                                                                                                                              if(dict.ContainsKey(s[i]))
                                                                                                                                              {
                                                                                                                                              start = Math.Max(start, dict[s[i]] + 1); //update start index
                                                                                                                                              dict[s[i]] = i;
                                                                                                                                              }
                                                                                                                                              else
                                                                                                                                              {
                                                                                                                                              dict.Add(s[i], i);
                                                                                                                                              }

                                                                                                                                              res = Math.Max(res, i - start + 1); //track max length
                                                                                                                                              }
                                                                                                                                              return s.Substring(start,res);
                                                                                                                                              }





                                                                                                                                              share|improve this answer























                                                                                                                                                up vote
                                                                                                                                                0
                                                                                                                                                down vote










                                                                                                                                                up vote
                                                                                                                                                0
                                                                                                                                                down vote









                                                                                                                                                I modified my solution to "find the length of the longest substring without repeating characters".



                                                                                                                                                        public string LengthOfLongestSubstring(string s) {
                                                                                                                                                var res = 0;
                                                                                                                                                var dict = new Dictionary<char, int>();
                                                                                                                                                var start = 0;

                                                                                                                                                for(int i =0; i< s.Length; i++)
                                                                                                                                                {
                                                                                                                                                if(dict.ContainsKey(s[i]))
                                                                                                                                                {
                                                                                                                                                start = Math.Max(start, dict[s[i]] + 1); //update start index
                                                                                                                                                dict[s[i]] = i;
                                                                                                                                                }
                                                                                                                                                else
                                                                                                                                                {
                                                                                                                                                dict.Add(s[i], i);
                                                                                                                                                }

                                                                                                                                                res = Math.Max(res, i - start + 1); //track max length
                                                                                                                                                }
                                                                                                                                                return s.Substring(start,res);
                                                                                                                                                }





                                                                                                                                                share|improve this answer












                                                                                                                                                I modified my solution to "find the length of the longest substring without repeating characters".



                                                                                                                                                        public string LengthOfLongestSubstring(string s) {
                                                                                                                                                var res = 0;
                                                                                                                                                var dict = new Dictionary<char, int>();
                                                                                                                                                var start = 0;

                                                                                                                                                for(int i =0; i< s.Length; i++)
                                                                                                                                                {
                                                                                                                                                if(dict.ContainsKey(s[i]))
                                                                                                                                                {
                                                                                                                                                start = Math.Max(start, dict[s[i]] + 1); //update start index
                                                                                                                                                dict[s[i]] = i;
                                                                                                                                                }
                                                                                                                                                else
                                                                                                                                                {
                                                                                                                                                dict.Add(s[i], i);
                                                                                                                                                }

                                                                                                                                                res = Math.Max(res, i - start + 1); //track max length
                                                                                                                                                }
                                                                                                                                                return s.Substring(start,res);
                                                                                                                                                }






                                                                                                                                                share|improve this answer












                                                                                                                                                share|improve this answer



                                                                                                                                                share|improve this answer










                                                                                                                                                answered Apr 14 '17 at 16:42









                                                                                                                                                Kevman

                                                                                                                                                18014




                                                                                                                                                18014






















                                                                                                                                                    up vote
                                                                                                                                                    0
                                                                                                                                                    down vote















                                                                                                                                                    import java.util.HashMap;
                                                                                                                                                    import java.util.HashSet;

                                                                                                                                                    public class SubString {
                                                                                                                                                    public static String subString(String input) {

                                                                                                                                                    String longesTillNOw = "";

                                                                                                                                                    String longestOverAll = "";
                                                                                                                                                    HashMap<Character,Integer> chars = new HashMap<>();
                                                                                                                                                    char array=input.toCharArray();
                                                                                                                                                    int start=0;
                                                                                                                                                    for (int i = 0; i < array.length; i++) {
                                                                                                                                                    char charactor = array[i];
                                                                                                                                                    if (chars.containsKey(charactor) ) {
                                                                                                                                                    start=chars.get(charactor)+1;
                                                                                                                                                    i=start;
                                                                                                                                                    chars.clear();
                                                                                                                                                    longesTillNOw = "";
                                                                                                                                                    } else {
                                                                                                                                                    chars.put(charactor,i);
                                                                                                                                                    longesTillNOw = longesTillNOw + charactor;
                                                                                                                                                    if (longesTillNOw.length() > longestOverAll.length()) {
                                                                                                                                                    longestOverAll = longesTillNOw;
                                                                                                                                                    }
                                                                                                                                                    }
                                                                                                                                                    }
                                                                                                                                                    return longestOverAll;

                                                                                                                                                    }

                                                                                                                                                    public static void main(String args) {
                                                                                                                                                    String input = "stackoverflowabcdefghijklmn";
                                                                                                                                                    System.out.println(subString(input));
                                                                                                                                                    }
                                                                                                                                                    }





                                                                                                                                                    share|improve this answer



























                                                                                                                                                      up vote
                                                                                                                                                      0
                                                                                                                                                      down vote















                                                                                                                                                      import java.util.HashMap;
                                                                                                                                                      import java.util.HashSet;

                                                                                                                                                      public class SubString {
                                                                                                                                                      public static String subString(String input) {

                                                                                                                                                      String longesTillNOw = "";

                                                                                                                                                      String longestOverAll = "";
                                                                                                                                                      HashMap<Character,Integer> chars = new HashMap<>();
                                                                                                                                                      char array=input.toCharArray();
                                                                                                                                                      int start=0;
                                                                                                                                                      for (int i = 0; i < array.length; i++) {
                                                                                                                                                      char charactor = array[i];
                                                                                                                                                      if (chars.containsKey(charactor) ) {
                                                                                                                                                      start=chars.get(charactor)+1;
                                                                                                                                                      i=start;
                                                                                                                                                      chars.clear();
                                                                                                                                                      longesTillNOw = "";
                                                                                                                                                      } else {
                                                                                                                                                      chars.put(charactor,i);
                                                                                                                                                      longesTillNOw = longesTillNOw + charactor;
                                                                                                                                                      if (longesTillNOw.length() > longestOverAll.length()) {
                                                                                                                                                      longestOverAll = longesTillNOw;
                                                                                                                                                      }
                                                                                                                                                      }
                                                                                                                                                      }
                                                                                                                                                      return longestOverAll;

                                                                                                                                                      }

                                                                                                                                                      public static void main(String args) {
                                                                                                                                                      String input = "stackoverflowabcdefghijklmn";
                                                                                                                                                      System.out.println(subString(input));
                                                                                                                                                      }
                                                                                                                                                      }





                                                                                                                                                      share|improve this answer

























                                                                                                                                                        up vote
                                                                                                                                                        0
                                                                                                                                                        down vote










                                                                                                                                                        up vote
                                                                                                                                                        0
                                                                                                                                                        down vote











                                                                                                                                                        import java.util.HashMap;
                                                                                                                                                        import java.util.HashSet;

                                                                                                                                                        public class SubString {
                                                                                                                                                        public static String subString(String input) {

                                                                                                                                                        String longesTillNOw = "";

                                                                                                                                                        String longestOverAll = "";
                                                                                                                                                        HashMap<Character,Integer> chars = new HashMap<>();
                                                                                                                                                        char array=input.toCharArray();
                                                                                                                                                        int start=0;
                                                                                                                                                        for (int i = 0; i < array.length; i++) {
                                                                                                                                                        char charactor = array[i];
                                                                                                                                                        if (chars.containsKey(charactor) ) {
                                                                                                                                                        start=chars.get(charactor)+1;
                                                                                                                                                        i=start;
                                                                                                                                                        chars.clear();
                                                                                                                                                        longesTillNOw = "";
                                                                                                                                                        } else {
                                                                                                                                                        chars.put(charactor,i);
                                                                                                                                                        longesTillNOw = longesTillNOw + charactor;
                                                                                                                                                        if (longesTillNOw.length() > longestOverAll.length()) {
                                                                                                                                                        longestOverAll = longesTillNOw;
                                                                                                                                                        }
                                                                                                                                                        }
                                                                                                                                                        }
                                                                                                                                                        return longestOverAll;

                                                                                                                                                        }

                                                                                                                                                        public static void main(String args) {
                                                                                                                                                        String input = "stackoverflowabcdefghijklmn";
                                                                                                                                                        System.out.println(subString(input));
                                                                                                                                                        }
                                                                                                                                                        }





                                                                                                                                                        share|improve this answer
















                                                                                                                                                        import java.util.HashMap;
                                                                                                                                                        import java.util.HashSet;

                                                                                                                                                        public class SubString {
                                                                                                                                                        public static String subString(String input) {

                                                                                                                                                        String longesTillNOw = "";

                                                                                                                                                        String longestOverAll = "";
                                                                                                                                                        HashMap<Character,Integer> chars = new HashMap<>();
                                                                                                                                                        char array=input.toCharArray();
                                                                                                                                                        int start=0;
                                                                                                                                                        for (int i = 0; i < array.length; i++) {
                                                                                                                                                        char charactor = array[i];
                                                                                                                                                        if (chars.containsKey(charactor) ) {
                                                                                                                                                        start=chars.get(charactor)+1;
                                                                                                                                                        i=start;
                                                                                                                                                        chars.clear();
                                                                                                                                                        longesTillNOw = "";
                                                                                                                                                        } else {
                                                                                                                                                        chars.put(charactor,i);
                                                                                                                                                        longesTillNOw = longesTillNOw + charactor;
                                                                                                                                                        if (longesTillNOw.length() > longestOverAll.length()) {
                                                                                                                                                        longestOverAll = longesTillNOw;
                                                                                                                                                        }
                                                                                                                                                        }
                                                                                                                                                        }
                                                                                                                                                        return longestOverAll;

                                                                                                                                                        }

                                                                                                                                                        public static void main(String args) {
                                                                                                                                                        String input = "stackoverflowabcdefghijklmn";
                                                                                                                                                        System.out.println(subString(input));
                                                                                                                                                        }
                                                                                                                                                        }






                                                                                                                                                        share|improve this answer














                                                                                                                                                        share|improve this answer



                                                                                                                                                        share|improve this answer








                                                                                                                                                        edited Apr 19 '17 at 18:36









                                                                                                                                                        Obenland

                                                                                                                                                        565719




                                                                                                                                                        565719










                                                                                                                                                        answered Apr 9 '17 at 18:25









                                                                                                                                                        Rahul

                                                                                                                                                        92317




                                                                                                                                                        92317






















                                                                                                                                                            up vote
                                                                                                                                                            0
                                                                                                                                                            down vote













                                                                                                                                                            Here are two ways to approach this problem in JavaScript.



                                                                                                                                                            A Brute Force approach is to loop through the string twice, checking every substring against every other substring and finding the maximum length where the substring is unique. We'll need two functions: one to check if a substring is unique and a second function to perform our double loop.



                                                                                                                                                            // O(n) time
                                                                                                                                                            const allUnique = str => {
                                                                                                                                                            const set = [...new Set(str)];
                                                                                                                                                            return (set.length == str.length) ? true: false;
                                                                                                                                                            }

                                                                                                                                                            // O(n^3) time, O(k) size where k is the size of the set
                                                                                                                                                            const lengthOfLongestSubstring = str => {
                                                                                                                                                            let result = 0,
                                                                                                                                                            maxResult = 0;
                                                                                                                                                            for (let i=0; i<str.length-1; i++) {
                                                                                                                                                            for (let j=i+1; j<str.length; j++) {
                                                                                                                                                            if (allUnique(str.substring(i, j))) {
                                                                                                                                                            result = str.substring(i, j).length;
                                                                                                                                                            if (result > maxResult) {
                                                                                                                                                            maxResult = result;
                                                                                                                                                            }
                                                                                                                                                            }
                                                                                                                                                            }
                                                                                                                                                            return maxResult;
                                                                                                                                                            }
                                                                                                                                                            }


                                                                                                                                                            This has a time complexity of O(n^3) since we perform a double loop O(n^2) and then another loop on top of that O(n) for our unique function. The space is the size of our set which can be generalized to O(n) or more accurately O(k) where k is the size of the set.



                                                                                                                                                            A Greedy Approach is to loop through only once and keep track of the maximum unique substring length as we go. We can use either an array or a hash map, but I think the new .includes() array method is cool, so let's use that.



                                                                                                                                                            const lengthOfLongestSubstring = str => {
                                                                                                                                                            let result = ,
                                                                                                                                                            maxResult = 0;

                                                                                                                                                            for (let i=0; i<str.length; i++) {
                                                                                                                                                            if (!result.includes(str[i])) {
                                                                                                                                                            result.push(str[i]);
                                                                                                                                                            } else {
                                                                                                                                                            maxResult = i;
                                                                                                                                                            }
                                                                                                                                                            }

                                                                                                                                                            return maxResult;
                                                                                                                                                            }


                                                                                                                                                            This has a time complexity of O(n) and a space complexity of O(1).






                                                                                                                                                            share|improve this answer

























                                                                                                                                                              up vote
                                                                                                                                                              0
                                                                                                                                                              down vote













                                                                                                                                                              Here are two ways to approach this problem in JavaScript.



                                                                                                                                                              A Brute Force approach is to loop through the string twice, checking every substring against every other substring and finding the maximum length where the substring is unique. We'll need two functions: one to check if a substring is unique and a second function to perform our double loop.



                                                                                                                                                              // O(n) time
                                                                                                                                                              const allUnique = str => {
                                                                                                                                                              const set = [...new Set(str)];
                                                                                                                                                              return (set.length == str.length) ? true: false;
                                                                                                                                                              }

                                                                                                                                                              // O(n^3) time, O(k) size where k is the size of the set
                                                                                                                                                              const lengthOfLongestSubstring = str => {
                                                                                                                                                              let result = 0,
                                                                                                                                                              maxResult = 0;
                                                                                                                                                              for (let i=0; i<str.length-1; i++) {
                                                                                                                                                              for (let j=i+1; j<str.length; j++) {
                                                                                                                                                              if (allUnique(str.substring(i, j))) {
                                                                                                                                                              result = str.substring(i, j).length;
                                                                                                                                                              if (result > maxResult) {
                                                                                                                                                              maxResult = result;
                                                                                                                                                              }
                                                                                                                                                              }
                                                                                                                                                              }
                                                                                                                                                              return maxResult;
                                                                                                                                                              }
                                                                                                                                                              }


                                                                                                                                                              This has a time complexity of O(n^3) since we perform a double loop O(n^2) and then another loop on top of that O(n) for our unique function. The space is the size of our set which can be generalized to O(n) or more accurately O(k) where k is the size of the set.



                                                                                                                                                              A Greedy Approach is to loop through only once and keep track of the maximum unique substring length as we go. We can use either an array or a hash map, but I think the new .includes() array method is cool, so let's use that.



                                                                                                                                                              const lengthOfLongestSubstring = str => {
                                                                                                                                                              let result = ,
                                                                                                                                                              maxResult = 0;

                                                                                                                                                              for (let i=0; i<str.length; i++) {
                                                                                                                                                              if (!result.includes(str[i])) {
                                                                                                                                                              result.push(str[i]);
                                                                                                                                                              } else {
                                                                                                                                                              maxResult = i;
                                                                                                                                                              }
                                                                                                                                                              }

                                                                                                                                                              return maxResult;
                                                                                                                                                              }


                                                                                                                                                              This has a time complexity of O(n) and a space complexity of O(1).






                                                                                                                                                              share|improve this answer























                                                                                                                                                                up vote
                                                                                                                                                                0
                                                                                                                                                                down vote










                                                                                                                                                                up vote
                                                                                                                                                                0
                                                                                                                                                                down vote









                                                                                                                                                                Here are two ways to approach this problem in JavaScript.



                                                                                                                                                                A Brute Force approach is to loop through the string twice, checking every substring against every other substring and finding the maximum length where the substring is unique. We'll need two functions: one to check if a substring is unique and a second function to perform our double loop.



                                                                                                                                                                // O(n) time
                                                                                                                                                                const allUnique = str => {
                                                                                                                                                                const set = [...new Set(str)];
                                                                                                                                                                return (set.length == str.length) ? true: false;
                                                                                                                                                                }

                                                                                                                                                                // O(n^3) time, O(k) size where k is the size of the set
                                                                                                                                                                const lengthOfLongestSubstring = str => {
                                                                                                                                                                let result = 0,
                                                                                                                                                                maxResult = 0;
                                                                                                                                                                for (let i=0; i<str.length-1; i++) {
                                                                                                                                                                for (let j=i+1; j<str.length; j++) {
                                                                                                                                                                if (allUnique(str.substring(i, j))) {
                                                                                                                                                                result = str.substring(i, j).length;
                                                                                                                                                                if (result > maxResult) {
                                                                                                                                                                maxResult = result;
                                                                                                                                                                }
                                                                                                                                                                }
                                                                                                                                                                }
                                                                                                                                                                return maxResult;
                                                                                                                                                                }
                                                                                                                                                                }


                                                                                                                                                                This has a time complexity of O(n^3) since we perform a double loop O(n^2) and then another loop on top of that O(n) for our unique function. The space is the size of our set which can be generalized to O(n) or more accurately O(k) where k is the size of the set.



                                                                                                                                                                A Greedy Approach is to loop through only once and keep track of the maximum unique substring length as we go. We can use either an array or a hash map, but I think the new .includes() array method is cool, so let's use that.



                                                                                                                                                                const lengthOfLongestSubstring = str => {
                                                                                                                                                                let result = ,
                                                                                                                                                                maxResult = 0;

                                                                                                                                                                for (let i=0; i<str.length; i++) {
                                                                                                                                                                if (!result.includes(str[i])) {
                                                                                                                                                                result.push(str[i]);
                                                                                                                                                                } else {
                                                                                                                                                                maxResult = i;
                                                                                                                                                                }
                                                                                                                                                                }

                                                                                                                                                                return maxResult;
                                                                                                                                                                }


                                                                                                                                                                This has a time complexity of O(n) and a space complexity of O(1).






                                                                                                                                                                share|improve this answer












                                                                                                                                                                Here are two ways to approach this problem in JavaScript.



                                                                                                                                                                A Brute Force approach is to loop through the string twice, checking every substring against every other substring and finding the maximum length where the substring is unique. We'll need two functions: one to check if a substring is unique and a second function to perform our double loop.



                                                                                                                                                                // O(n) time
                                                                                                                                                                const allUnique = str => {
                                                                                                                                                                const set = [...new Set(str)];
                                                                                                                                                                return (set.length == str.length) ? true: false;
                                                                                                                                                                }

                                                                                                                                                                // O(n^3) time, O(k) size where k is the size of the set
                                                                                                                                                                const lengthOfLongestSubstring = str => {
                                                                                                                                                                let result = 0,
                                                                                                                                                                maxResult = 0;
                                                                                                                                                                for (let i=0; i<str.length-1; i++) {
                                                                                                                                                                for (let j=i+1; j<str.length; j++) {
                                                                                                                                                                if (allUnique(str.substring(i, j))) {
                                                                                                                                                                result = str.substring(i, j).length;
                                                                                                                                                                if (result > maxResult) {
                                                                                                                                                                maxResult = result;
                                                                                                                                                                }
                                                                                                                                                                }
                                                                                                                                                                }
                                                                                                                                                                return maxResult;
                                                                                                                                                                }
                                                                                                                                                                }


                                                                                                                                                                This has a time complexity of O(n^3) since we perform a double loop O(n^2) and then another loop on top of that O(n) for our unique function. The space is the size of our set which can be generalized to O(n) or more accurately O(k) where k is the size of the set.



                                                                                                                                                                A Greedy Approach is to loop through only once and keep track of the maximum unique substring length as we go. We can use either an array or a hash map, but I think the new .includes() array method is cool, so let's use that.



                                                                                                                                                                const lengthOfLongestSubstring = str => {
                                                                                                                                                                let result = ,
                                                                                                                                                                maxResult = 0;

                                                                                                                                                                for (let i=0; i<str.length; i++) {
                                                                                                                                                                if (!result.includes(str[i])) {
                                                                                                                                                                result.push(str[i]);
                                                                                                                                                                } else {
                                                                                                                                                                maxResult = i;
                                                                                                                                                                }
                                                                                                                                                                }

                                                                                                                                                                return maxResult;
                                                                                                                                                                }


                                                                                                                                                                This has a time complexity of O(n) and a space complexity of O(1).







                                                                                                                                                                share|improve this answer












                                                                                                                                                                share|improve this answer



                                                                                                                                                                share|improve this answer










                                                                                                                                                                answered Jan 8 at 14:35









                                                                                                                                                                wsvincent

                                                                                                                                                                85111




                                                                                                                                                                85111






















                                                                                                                                                                    up vote
                                                                                                                                                                    0
                                                                                                                                                                    down vote













                                                                                                                                                                    This problem can be solved in O(n) time complexity.
                                                                                                                                                                    Initialize three variables




                                                                                                                                                                    1. Start (index pointing to the start of the non repeating substring, Initialize it as 0 ).

                                                                                                                                                                    2. End (index pointing to the end of the non repeating substring, Initialize it as 0 )

                                                                                                                                                                    3. Hasmap (Object containing the last visited index positions of characters. Ex : {'a':0, 'b':1} for string "ab")


                                                                                                                                                                    Steps :
                                                                                                                                                                    Iterate over the string and perform following actions.




                                                                                                                                                                    1. If the current character is not present in hashmap (), add it as to
                                                                                                                                                                      hashmap, character as key and its index as value.


                                                                                                                                                                    2. If current character is present in hashmap, then



                                                                                                                                                                      a) Check whether the start index is less than or equal to the value present in the hashmap against the character (last index of same character earlier visited),



                                                                                                                                                                      b) it is less then assign start variables value as the hashmaps' value + 1 (last index of same character earlier visited + 1);



                                                                                                                                                                      c) Update hashmap by overriding the hashmap's current character's value as current index of character.



                                                                                                                                                                      d) Calculate the end-start as the longest substring value and update if it's greater than earlier longest non-repeating substring.




                                                                                                                                                                    Following is the Javascript Solution for this problem.



                                                                                                                                                                    var lengthOfLongestSubstring = function(s) {
                                                                                                                                                                    let length = s.length;
                                                                                                                                                                    let ans = 0;
                                                                                                                                                                    let start = 0,
                                                                                                                                                                    end = 0;
                                                                                                                                                                    let hashMap = {};

                                                                                                                                                                    for (var i = 0; i < length; i++) {

                                                                                                                                                                    if (!hashMap.hasOwnProperty(s[i])) {
                                                                                                                                                                    hashMap[s[i]] = i;
                                                                                                                                                                    } else {
                                                                                                                                                                    if (start <= hashMap[s[i]]) {
                                                                                                                                                                    start = hashMap[s[i]] + 1;
                                                                                                                                                                    }
                                                                                                                                                                    hashMap[s[i]] = i;
                                                                                                                                                                    }
                                                                                                                                                                    end++;
                                                                                                                                                                    ans = ans > (end - start) ? ans : (end - start);
                                                                                                                                                                    }
                                                                                                                                                                    return ans;
                                                                                                                                                                    };





                                                                                                                                                                    share|improve this answer

























                                                                                                                                                                      up vote
                                                                                                                                                                      0
                                                                                                                                                                      down vote













                                                                                                                                                                      This problem can be solved in O(n) time complexity.
                                                                                                                                                                      Initialize three variables




                                                                                                                                                                      1. Start (index pointing to the start of the non repeating substring, Initialize it as 0 ).

                                                                                                                                                                      2. End (index pointing to the end of the non repeating substring, Initialize it as 0 )

                                                                                                                                                                      3. Hasmap (Object containing the last visited index positions of characters. Ex : {'a':0, 'b':1} for string "ab")


                                                                                                                                                                      Steps :
                                                                                                                                                                      Iterate over the string and perform following actions.




                                                                                                                                                                      1. If the current character is not present in hashmap (), add it as to
                                                                                                                                                                        hashmap, character as key and its index as value.


                                                                                                                                                                      2. If current character is present in hashmap, then



                                                                                                                                                                        a) Check whether the start index is less than or equal to the value present in the hashmap against the character (last index of same character earlier visited),



                                                                                                                                                                        b) it is less then assign start variables value as the hashmaps' value + 1 (last index of same character earlier visited + 1);



                                                                                                                                                                        c) Update hashmap by overriding the hashmap's current character's value as current index of character.



                                                                                                                                                                        d) Calculate the end-start as the longest substring value and update if it's greater than earlier longest non-repeating substring.




                                                                                                                                                                      Following is the Javascript Solution for this problem.



                                                                                                                                                                      var lengthOfLongestSubstring = function(s) {
                                                                                                                                                                      let length = s.length;
                                                                                                                                                                      let ans = 0;
                                                                                                                                                                      let start = 0,
                                                                                                                                                                      end = 0;
                                                                                                                                                                      let hashMap = {};

                                                                                                                                                                      for (var i = 0; i < length; i++) {

                                                                                                                                                                      if (!hashMap.hasOwnProperty(s[i])) {
                                                                                                                                                                      hashMap[s[i]] = i;
                                                                                                                                                                      } else {
                                                                                                                                                                      if (start <= hashMap[s[i]]) {
                                                                                                                                                                      start = hashMap[s[i]] + 1;
                                                                                                                                                                      }
                                                                                                                                                                      hashMap[s[i]] = i;
                                                                                                                                                                      }
                                                                                                                                                                      end++;
                                                                                                                                                                      ans = ans > (end - start) ? ans : (end - start);
                                                                                                                                                                      }
                                                                                                                                                                      return ans;
                                                                                                                                                                      };





                                                                                                                                                                      share|improve this answer























                                                                                                                                                                        up vote
                                                                                                                                                                        0
                                                                                                                                                                        down vote










                                                                                                                                                                        up vote
                                                                                                                                                                        0
                                                                                                                                                                        down vote









                                                                                                                                                                        This problem can be solved in O(n) time complexity.
                                                                                                                                                                        Initialize three variables




                                                                                                                                                                        1. Start (index pointing to the start of the non repeating substring, Initialize it as 0 ).

                                                                                                                                                                        2. End (index pointing to the end of the non repeating substring, Initialize it as 0 )

                                                                                                                                                                        3. Hasmap (Object containing the last visited index positions of characters. Ex : {'a':0, 'b':1} for string "ab")


                                                                                                                                                                        Steps :
                                                                                                                                                                        Iterate over the string and perform following actions.




                                                                                                                                                                        1. If the current character is not present in hashmap (), add it as to
                                                                                                                                                                          hashmap, character as key and its index as value.


                                                                                                                                                                        2. If current character is present in hashmap, then



                                                                                                                                                                          a) Check whether the start index is less than or equal to the value present in the hashmap against the character (last index of same character earlier visited),



                                                                                                                                                                          b) it is less then assign start variables value as the hashmaps' value + 1 (last index of same character earlier visited + 1);



                                                                                                                                                                          c) Update hashmap by overriding the hashmap's current character's value as current index of character.



                                                                                                                                                                          d) Calculate the end-start as the longest substring value and update if it's greater than earlier longest non-repeating substring.




                                                                                                                                                                        Following is the Javascript Solution for this problem.



                                                                                                                                                                        var lengthOfLongestSubstring = function(s) {
                                                                                                                                                                        let length = s.length;
                                                                                                                                                                        let ans = 0;
                                                                                                                                                                        let start = 0,
                                                                                                                                                                        end = 0;
                                                                                                                                                                        let hashMap = {};

                                                                                                                                                                        for (var i = 0; i < length; i++) {

                                                                                                                                                                        if (!hashMap.hasOwnProperty(s[i])) {
                                                                                                                                                                        hashMap[s[i]] = i;
                                                                                                                                                                        } else {
                                                                                                                                                                        if (start <= hashMap[s[i]]) {
                                                                                                                                                                        start = hashMap[s[i]] + 1;
                                                                                                                                                                        }
                                                                                                                                                                        hashMap[s[i]] = i;
                                                                                                                                                                        }
                                                                                                                                                                        end++;
                                                                                                                                                                        ans = ans > (end - start) ? ans : (end - start);
                                                                                                                                                                        }
                                                                                                                                                                        return ans;
                                                                                                                                                                        };





                                                                                                                                                                        share|improve this answer












                                                                                                                                                                        This problem can be solved in O(n) time complexity.
                                                                                                                                                                        Initialize three variables




                                                                                                                                                                        1. Start (index pointing to the start of the non repeating substring, Initialize it as 0 ).

                                                                                                                                                                        2. End (index pointing to the end of the non repeating substring, Initialize it as 0 )

                                                                                                                                                                        3. Hasmap (Object containing the last visited index positions of characters. Ex : {'a':0, 'b':1} for string "ab")


                                                                                                                                                                        Steps :
                                                                                                                                                                        Iterate over the string and perform following actions.




                                                                                                                                                                        1. If the current character is not present in hashmap (), add it as to
                                                                                                                                                                          hashmap, character as key and its index as value.


                                                                                                                                                                        2. If current character is present in hashmap, then



                                                                                                                                                                          a) Check whether the start index is less than or equal to the value present in the hashmap against the character (last index of same character earlier visited),



                                                                                                                                                                          b) it is less then assign start variables value as the hashmaps' value + 1 (last index of same character earlier visited + 1);



                                                                                                                                                                          c) Update hashmap by overriding the hashmap's current character's value as current index of character.



                                                                                                                                                                          d) Calculate the end-start as the longest substring value and update if it's greater than earlier longest non-repeating substring.




                                                                                                                                                                        Following is the Javascript Solution for this problem.



                                                                                                                                                                        var lengthOfLongestSubstring = function(s) {
                                                                                                                                                                        let length = s.length;
                                                                                                                                                                        let ans = 0;
                                                                                                                                                                        let start = 0,
                                                                                                                                                                        end = 0;
                                                                                                                                                                        let hashMap = {};

                                                                                                                                                                        for (var i = 0; i < length; i++) {

                                                                                                                                                                        if (!hashMap.hasOwnProperty(s[i])) {
                                                                                                                                                                        hashMap[s[i]] = i;
                                                                                                                                                                        } else {
                                                                                                                                                                        if (start <= hashMap[s[i]]) {
                                                                                                                                                                        start = hashMap[s[i]] + 1;
                                                                                                                                                                        }
                                                                                                                                                                        hashMap[s[i]] = i;
                                                                                                                                                                        }
                                                                                                                                                                        end++;
                                                                                                                                                                        ans = ans > (end - start) ? ans : (end - start);
                                                                                                                                                                        }
                                                                                                                                                                        return ans;
                                                                                                                                                                        };






                                                                                                                                                                        share|improve this answer












                                                                                                                                                                        share|improve this answer



                                                                                                                                                                        share|improve this answer










                                                                                                                                                                        answered Apr 3 at 12:42









                                                                                                                                                                        Rohit Bhalke

                                                                                                                                                                        12915




                                                                                                                                                                        12915






















                                                                                                                                                                            up vote
                                                                                                                                                                            0
                                                                                                                                                                            down vote













                                                                                                                                                                            Question: Find the longest substring without repeating characters.
                                                                                                                                                                            Example 1 :



                                                                                                                                                                                import java.util.LinkedHashMap;
                                                                                                                                                                            import java.util.Map;

                                                                                                                                                                            public class example1 {

                                                                                                                                                                            public static void main(String args) {
                                                                                                                                                                            String a = "abcabcbb";
                                                                                                                                                                            // output => 3
                                                                                                                                                                            System.out.println( lengthOfLongestSubstring(a));

                                                                                                                                                                            }

                                                                                                                                                                            private static int lengthOfLongestSubstring(String a) {
                                                                                                                                                                            if(a == null || a.length() == 0) {return 0 ;}
                                                                                                                                                                            int res = 0 ;
                                                                                                                                                                            Map<Character , Integer> map = new LinkedHashMap<>();
                                                                                                                                                                            for (int i = 0; i < a.length(); i++) {
                                                                                                                                                                            char ch = a.charAt(i);
                                                                                                                                                                            if (!map.containsKey(ch)) {
                                                                                                                                                                            //If ch is not present in map, adding ch into map along with its position
                                                                                                                                                                            map.put(ch, i);

                                                                                                                                                                            }else {
                                                                                                                                                                            /*
                                                                                                                                                                            If char ch is present in Map, reposition the cursor i to the position of ch and clear the Map.
                                                                                                                                                                            */
                                                                                                                                                                            i = map.put(ch, i);// updation of index
                                                                                                                                                                            map.clear();
                                                                                                                                                                            }//else

                                                                                                                                                                            res = Math.max(res, map.size());

                                                                                                                                                                            }



                                                                                                                                                                            return res;
                                                                                                                                                                            }

                                                                                                                                                                            }


                                                                                                                                                                            if you want the longest string without the repeating characters as output then do this inside the for loop:



                                                                                                                                                                            String res ="";// global
                                                                                                                                                                            int len = 0 ;//global
                                                                                                                                                                            if(len < map.size()) {
                                                                                                                                                                            len = map.size();
                                                                                                                                                                            res = map.keySet().toString();
                                                                                                                                                                            }
                                                                                                                                                                            System.out.println("len -> " + len);
                                                                                                                                                                            System.out.println("res => " + res);





                                                                                                                                                                            share|improve this answer























                                                                                                                                                                            • Thank you for this code snippet, which might provide some limited short-term help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem, and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you've made.
                                                                                                                                                                              – Toby Speight
                                                                                                                                                                              Apr 3 at 17:42















                                                                                                                                                                            up vote
                                                                                                                                                                            0
                                                                                                                                                                            down vote













                                                                                                                                                                            Question: Find the longest substring without repeating characters.
                                                                                                                                                                            Example 1 :



                                                                                                                                                                                import java.util.LinkedHashMap;
                                                                                                                                                                            import java.util.Map;

                                                                                                                                                                            public class example1 {

                                                                                                                                                                            public static void main(String args) {
                                                                                                                                                                            String a = "abcabcbb";
                                                                                                                                                                            // output => 3
                                                                                                                                                                            System.out.println( lengthOfLongestSubstring(a));

                                                                                                                                                                            }

                                                                                                                                                                            private static int lengthOfLongestSubstring(String a) {
                                                                                                                                                                            if(a == null || a.length() == 0) {return 0 ;}
                                                                                                                                                                            int res = 0 ;
                                                                                                                                                                            Map<Character , Integer> map = new LinkedHashMap<>();
                                                                                                                                                                            for (int i = 0; i < a.length(); i++) {
                                                                                                                                                                            char ch = a.charAt(i);
                                                                                                                                                                            if (!map.containsKey(ch)) {
                                                                                                                                                                            //If ch is not present in map, adding ch into map along with its position
                                                                                                                                                                            map.put(ch, i);

                                                                                                                                                                            }else {
                                                                                                                                                                            /*
                                                                                                                                                                            If char ch is present in Map, reposition the cursor i to the position of ch and clear the Map.
                                                                                                                                                                            */
                                                                                                                                                                            i = map.put(ch, i);// updation of index
                                                                                                                                                                            map.clear();
                                                                                                                                                                            }//else

                                                                                                                                                                            res = Math.max(res, map.size());

                                                                                                                                                                            }



                                                                                                                                                                            return res;
                                                                                                                                                                            }

                                                                                                                                                                            }


                                                                                                                                                                            if you want the longest string without the repeating characters as output then do this inside the for loop:



                                                                                                                                                                            String res ="";// global
                                                                                                                                                                            int len = 0 ;//global
                                                                                                                                                                            if(len < map.size()) {
                                                                                                                                                                            len = map.size();
                                                                                                                                                                            res = map.keySet().toString();
                                                                                                                                                                            }
                                                                                                                                                                            System.out.println("len -> " + len);
                                                                                                                                                                            System.out.println("res => " + res);





                                                                                                                                                                            share|improve this answer























                                                                                                                                                                            • Thank you for this code snippet, which might provide some limited short-term help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem, and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you've made.
                                                                                                                                                                              – Toby Speight
                                                                                                                                                                              Apr 3 at 17:42













                                                                                                                                                                            up vote
                                                                                                                                                                            0
                                                                                                                                                                            down vote










                                                                                                                                                                            up vote
                                                                                                                                                                            0
                                                                                                                                                                            down vote









                                                                                                                                                                            Question: Find the longest substring without repeating characters.
                                                                                                                                                                            Example 1 :



                                                                                                                                                                                import java.util.LinkedHashMap;
                                                                                                                                                                            import java.util.Map;

                                                                                                                                                                            public class example1 {

                                                                                                                                                                            public static void main(String args) {
                                                                                                                                                                            String a = "abcabcbb";
                                                                                                                                                                            // output => 3
                                                                                                                                                                            System.out.println( lengthOfLongestSubstring(a));

                                                                                                                                                                            }

                                                                                                                                                                            private static int lengthOfLongestSubstring(String a) {
                                                                                                                                                                            if(a == null || a.length() == 0) {return 0 ;}
                                                                                                                                                                            int res = 0 ;
                                                                                                                                                                            Map<Character , Integer> map = new LinkedHashMap<>();
                                                                                                                                                                            for (int i = 0; i < a.length(); i++) {
                                                                                                                                                                            char ch = a.charAt(i);
                                                                                                                                                                            if (!map.containsKey(ch)) {
                                                                                                                                                                            //If ch is not present in map, adding ch into map along with its position
                                                                                                                                                                            map.put(ch, i);

                                                                                                                                                                            }else {
                                                                                                                                                                            /*
                                                                                                                                                                            If char ch is present in Map, reposition the cursor i to the position of ch and clear the Map.
                                                                                                                                                                            */
                                                                                                                                                                            i = map.put(ch, i);// updation of index
                                                                                                                                                                            map.clear();
                                                                                                                                                                            }//else

                                                                                                                                                                            res = Math.max(res, map.size());

                                                                                                                                                                            }



                                                                                                                                                                            return res;
                                                                                                                                                                            }

                                                                                                                                                                            }


                                                                                                                                                                            if you want the longest string without the repeating characters as output then do this inside the for loop:



                                                                                                                                                                            String res ="";// global
                                                                                                                                                                            int len = 0 ;//global
                                                                                                                                                                            if(len < map.size()) {
                                                                                                                                                                            len = map.size();
                                                                                                                                                                            res = map.keySet().toString();
                                                                                                                                                                            }
                                                                                                                                                                            System.out.println("len -> " + len);
                                                                                                                                                                            System.out.println("res => " + res);





                                                                                                                                                                            share|improve this answer














                                                                                                                                                                            Question: Find the longest substring without repeating characters.
                                                                                                                                                                            Example 1 :



                                                                                                                                                                                import java.util.LinkedHashMap;
                                                                                                                                                                            import java.util.Map;

                                                                                                                                                                            public class example1 {

                                                                                                                                                                            public static void main(String args) {
                                                                                                                                                                            String a = "abcabcbb";
                                                                                                                                                                            // output => 3
                                                                                                                                                                            System.out.println( lengthOfLongestSubstring(a));

                                                                                                                                                                            }

                                                                                                                                                                            private static int lengthOfLongestSubstring(String a) {
                                                                                                                                                                            if(a == null || a.length() == 0) {return 0 ;}
                                                                                                                                                                            int res = 0 ;
                                                                                                                                                                            Map<Character , Integer> map = new LinkedHashMap<>();
                                                                                                                                                                            for (int i = 0; i < a.length(); i++) {
                                                                                                                                                                            char ch = a.charAt(i);
                                                                                                                                                                            if (!map.containsKey(ch)) {
                                                                                                                                                                            //If ch is not present in map, adding ch into map along with its position
                                                                                                                                                                            map.put(ch, i);

                                                                                                                                                                            }else {
                                                                                                                                                                            /*
                                                                                                                                                                            If char ch is present in Map, reposition the cursor i to the position of ch and clear the Map.
                                                                                                                                                                            */
                                                                                                                                                                            i = map.put(ch, i);// updation of index
                                                                                                                                                                            map.clear();
                                                                                                                                                                            }//else

                                                                                                                                                                            res = Math.max(res, map.size());

                                                                                                                                                                            }



                                                                                                                                                                            return res;
                                                                                                                                                                            }

                                                                                                                                                                            }


                                                                                                                                                                            if you want the longest string without the repeating characters as output then do this inside the for loop:



                                                                                                                                                                            String res ="";// global
                                                                                                                                                                            int len = 0 ;//global
                                                                                                                                                                            if(len < map.size()) {
                                                                                                                                                                            len = map.size();
                                                                                                                                                                            res = map.keySet().toString();
                                                                                                                                                                            }
                                                                                                                                                                            System.out.println("len -> " + len);
                                                                                                                                                                            System.out.println("res => " + res);






                                                                                                                                                                            share|improve this answer














                                                                                                                                                                            share|improve this answer



                                                                                                                                                                            share|improve this answer








                                                                                                                                                                            edited Apr 24 at 8:50

























                                                                                                                                                                            answered Apr 3 at 11:02









                                                                                                                                                                            Soudipta Dutta

                                                                                                                                                                            12913




                                                                                                                                                                            12913












                                                                                                                                                                            • Thank you for this code snippet, which might provide some limited short-term help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem, and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you've made.
                                                                                                                                                                              – Toby Speight
                                                                                                                                                                              Apr 3 at 17:42


















                                                                                                                                                                            • Thank you for this code snippet, which might provide some limited short-term help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem, and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you've made.
                                                                                                                                                                              – Toby Speight
                                                                                                                                                                              Apr 3 at 17:42
















                                                                                                                                                                            Thank you for this code snippet, which might provide some limited short-term help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem, and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you've made.
                                                                                                                                                                            – Toby Speight
                                                                                                                                                                            Apr 3 at 17:42




                                                                                                                                                                            Thank you for this code snippet, which might provide some limited short-term help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem, and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you've made.
                                                                                                                                                                            – Toby Speight
                                                                                                                                                                            Apr 3 at 17:42










                                                                                                                                                                            up vote
                                                                                                                                                                            0
                                                                                                                                                                            down vote













                                                                                                                                                                            def max_substring(string):
                                                                                                                                                                            last_substring = ''
                                                                                                                                                                            max_substring = ''
                                                                                                                                                                            for x in string:
                                                                                                                                                                            k = find_index(x,last_substring)
                                                                                                                                                                            last_substring = last_substring[(k+1):]+x
                                                                                                                                                                            if len(last_substring) > len(max_substring):
                                                                                                                                                                            max_substring = last_substring
                                                                                                                                                                            return max_substring

                                                                                                                                                                            def find_index(x, lst):
                                                                                                                                                                            k = 0
                                                                                                                                                                            while k <len(lst):
                                                                                                                                                                            if lst[k] == x:
                                                                                                                                                                            return k
                                                                                                                                                                            k +=1
                                                                                                                                                                            return -1





                                                                                                                                                                            share|improve this answer

























                                                                                                                                                                              up vote
                                                                                                                                                                              0
                                                                                                                                                                              down vote













                                                                                                                                                                              def max_substring(string):
                                                                                                                                                                              last_substring = ''
                                                                                                                                                                              max_substring = ''
                                                                                                                                                                              for x in string:
                                                                                                                                                                              k = find_index(x,last_substring)
                                                                                                                                                                              last_substring = last_substring[(k+1):]+x
                                                                                                                                                                              if len(last_substring) > len(max_substring):
                                                                                                                                                                              max_substring = last_substring
                                                                                                                                                                              return max_substring

                                                                                                                                                                              def find_index(x, lst):
                                                                                                                                                                              k = 0
                                                                                                                                                                              while k <len(lst):
                                                                                                                                                                              if lst[k] == x:
                                                                                                                                                                              return k
                                                                                                                                                                              k +=1
                                                                                                                                                                              return -1





                                                                                                                                                                              share|improve this answer























                                                                                                                                                                                up vote
                                                                                                                                                                                0
                                                                                                                                                                                down vote










                                                                                                                                                                                up vote
                                                                                                                                                                                0
                                                                                                                                                                                down vote









                                                                                                                                                                                def max_substring(string):
                                                                                                                                                                                last_substring = ''
                                                                                                                                                                                max_substring = ''
                                                                                                                                                                                for x in string:
                                                                                                                                                                                k = find_index(x,last_substring)
                                                                                                                                                                                last_substring = last_substring[(k+1):]+x
                                                                                                                                                                                if len(last_substring) > len(max_substring):
                                                                                                                                                                                max_substring = last_substring
                                                                                                                                                                                return max_substring

                                                                                                                                                                                def find_index(x, lst):
                                                                                                                                                                                k = 0
                                                                                                                                                                                while k <len(lst):
                                                                                                                                                                                if lst[k] == x:
                                                                                                                                                                                return k
                                                                                                                                                                                k +=1
                                                                                                                                                                                return -1





                                                                                                                                                                                share|improve this answer












                                                                                                                                                                                def max_substring(string):
                                                                                                                                                                                last_substring = ''
                                                                                                                                                                                max_substring = ''
                                                                                                                                                                                for x in string:
                                                                                                                                                                                k = find_index(x,last_substring)
                                                                                                                                                                                last_substring = last_substring[(k+1):]+x
                                                                                                                                                                                if len(last_substring) > len(max_substring):
                                                                                                                                                                                max_substring = last_substring
                                                                                                                                                                                return max_substring

                                                                                                                                                                                def find_index(x, lst):
                                                                                                                                                                                k = 0
                                                                                                                                                                                while k <len(lst):
                                                                                                                                                                                if lst[k] == x:
                                                                                                                                                                                return k
                                                                                                                                                                                k +=1
                                                                                                                                                                                return -1






                                                                                                                                                                                share|improve this answer












                                                                                                                                                                                share|improve this answer



                                                                                                                                                                                share|improve this answer










                                                                                                                                                                                answered Jun 26 at 2:42









                                                                                                                                                                                Aysun

                                                                                                                                                                                746




                                                                                                                                                                                746






















                                                                                                                                                                                    up vote
                                                                                                                                                                                    0
                                                                                                                                                                                    down vote













                                                                                                                                                                                    can we use something like this .



                                                                                                                                                                                    def longestpalindrome(str1):
                                                                                                                                                                                    arr1=list(str1)
                                                                                                                                                                                    s=set(arr1)
                                                                                                                                                                                    arr2=list(s)
                                                                                                                                                                                    return len(arr2)



                                                                                                                                                                                    str1='abadef'
                                                                                                                                                                                    a=longestpalindrome(str1)
                                                                                                                                                                                    print(a)


                                                                                                                                                                                    if only length of the substring is to be returned






                                                                                                                                                                                    share|improve this answer

























                                                                                                                                                                                      up vote
                                                                                                                                                                                      0
                                                                                                                                                                                      down vote













                                                                                                                                                                                      can we use something like this .



                                                                                                                                                                                      def longestpalindrome(str1):
                                                                                                                                                                                      arr1=list(str1)
                                                                                                                                                                                      s=set(arr1)
                                                                                                                                                                                      arr2=list(s)
                                                                                                                                                                                      return len(arr2)



                                                                                                                                                                                      str1='abadef'
                                                                                                                                                                                      a=longestpalindrome(str1)
                                                                                                                                                                                      print(a)


                                                                                                                                                                                      if only length of the substring is to be returned






                                                                                                                                                                                      share|improve this answer























                                                                                                                                                                                        up vote
                                                                                                                                                                                        0
                                                                                                                                                                                        down vote










                                                                                                                                                                                        up vote
                                                                                                                                                                                        0
                                                                                                                                                                                        down vote









                                                                                                                                                                                        can we use something like this .



                                                                                                                                                                                        def longestpalindrome(str1):
                                                                                                                                                                                        arr1=list(str1)
                                                                                                                                                                                        s=set(arr1)
                                                                                                                                                                                        arr2=list(s)
                                                                                                                                                                                        return len(arr2)



                                                                                                                                                                                        str1='abadef'
                                                                                                                                                                                        a=longestpalindrome(str1)
                                                                                                                                                                                        print(a)


                                                                                                                                                                                        if only length of the substring is to be returned






                                                                                                                                                                                        share|improve this answer












                                                                                                                                                                                        can we use something like this .



                                                                                                                                                                                        def longestpalindrome(str1):
                                                                                                                                                                                        arr1=list(str1)
                                                                                                                                                                                        s=set(arr1)
                                                                                                                                                                                        arr2=list(s)
                                                                                                                                                                                        return len(arr2)



                                                                                                                                                                                        str1='abadef'
                                                                                                                                                                                        a=longestpalindrome(str1)
                                                                                                                                                                                        print(a)


                                                                                                                                                                                        if only length of the substring is to be returned







                                                                                                                                                                                        share|improve this answer












                                                                                                                                                                                        share|improve this answer



                                                                                                                                                                                        share|improve this answer










                                                                                                                                                                                        answered Jul 12 at 13:47









                                                                                                                                                                                        ravi tanwar

                                                                                                                                                                                        9110




                                                                                                                                                                                        9110






















                                                                                                                                                                                            up vote
                                                                                                                                                                                            0
                                                                                                                                                                                            down vote













                                                                                                                                                                                            Algorithm:
                                                                                                                                                                                            1) Initialise an empty dictionary dct to check if any character already exists in the string.
                                                                                                                                                                                            2) cnt - to keep the count of substring without repeating characters.
                                                                                                                                                                                            3)l and r are the two pointers initialised to first index of the string.
                                                                                                                                                                                            4)loop through each char of the string.
                                                                                                                                                                                            5) If the character not present in the dct add itand increse the cnt.
                                                                                                                                                                                            6)If its already present then check if cnt is greater then resStrLen.
                                                                                                                                                                                            7)Remove the char from dct and shift the left pointer by 1 and decrease the count.
                                                                                                                                                                                            8)Repeat 5,6,7 till l,r greater or equal to length of the input string.
                                                                                                                                                                                            9)Have one more check at the end to handle cases like input string with non-repeating characters.

                                                                                                                                                                                            Here is the simple python program to Find longest substring without repeating characters




                                                                                                                                                                                            a="stackoverflow"
                                                                                                                                                                                            strLength = len(a)
                                                                                                                                                                                            dct={}
                                                                                                                                                                                            resStrLen=0
                                                                                                                                                                                            cnt=0
                                                                                                                                                                                            l=0
                                                                                                                                                                                            r=0
                                                                                                                                                                                            strb=l
                                                                                                                                                                                            stre=l
                                                                                                                                                                                            while(l<strLength and r<strLength):
                                                                                                                                                                                            if a[l] in dct:
                                                                                                                                                                                            if cnt>resStrLen:
                                                                                                                                                                                            resStrLen=cnt
                                                                                                                                                                                            strb=r
                                                                                                                                                                                            stre=l
                                                                                                                                                                                            dct.pop(a[r])
                                                                                                                                                                                            cnt=cnt-1
                                                                                                                                                                                            r+=1
                                                                                                                                                                                            else:
                                                                                                                                                                                            cnt+=1
                                                                                                                                                                                            dct[a[l]]=1
                                                                                                                                                                                            l+=1

                                                                                                                                                                                            if cnt>resStrLen:
                                                                                                                                                                                            resStrLen=cnt
                                                                                                                                                                                            strb=r
                                                                                                                                                                                            stre=l

                                                                                                                                                                                            print "Result String Length : "+str(resStrLen)
                                                                                                                                                                                            print "Result String : " + a[strb:stre]









                                                                                                                                                                                            share|improve this answer

























                                                                                                                                                                                              up vote
                                                                                                                                                                                              0
                                                                                                                                                                                              down vote













                                                                                                                                                                                              Algorithm:
                                                                                                                                                                                              1) Initialise an empty dictionary dct to check if any character already exists in the string.
                                                                                                                                                                                              2) cnt - to keep the count of substring without repeating characters.
                                                                                                                                                                                              3)l and r are the two pointers initialised to first index of the string.
                                                                                                                                                                                              4)loop through each char of the string.
                                                                                                                                                                                              5) If the character not present in the dct add itand increse the cnt.
                                                                                                                                                                                              6)If its already present then check if cnt is greater then resStrLen.
                                                                                                                                                                                              7)Remove the char from dct and shift the left pointer by 1 and decrease the count.
                                                                                                                                                                                              8)Repeat 5,6,7 till l,r greater or equal to length of the input string.
                                                                                                                                                                                              9)Have one more check at the end to handle cases like input string with non-repeating characters.

                                                                                                                                                                                              Here is the simple python program to Find longest substring without repeating characters




                                                                                                                                                                                              a="stackoverflow"
                                                                                                                                                                                              strLength = len(a)
                                                                                                                                                                                              dct={}
                                                                                                                                                                                              resStrLen=0
                                                                                                                                                                                              cnt=0
                                                                                                                                                                                              l=0
                                                                                                                                                                                              r=0
                                                                                                                                                                                              strb=l
                                                                                                                                                                                              stre=l
                                                                                                                                                                                              while(l<strLength and r<strLength):
                                                                                                                                                                                              if a[l] in dct:
                                                                                                                                                                                              if cnt>resStrLen:
                                                                                                                                                                                              resStrLen=cnt
                                                                                                                                                                                              strb=r
                                                                                                                                                                                              stre=l
                                                                                                                                                                                              dct.pop(a[r])
                                                                                                                                                                                              cnt=cnt-1
                                                                                                                                                                                              r+=1
                                                                                                                                                                                              else:
                                                                                                                                                                                              cnt+=1
                                                                                                                                                                                              dct[a[l]]=1
                                                                                                                                                                                              l+=1

                                                                                                                                                                                              if cnt>resStrLen:
                                                                                                                                                                                              resStrLen=cnt
                                                                                                                                                                                              strb=r
                                                                                                                                                                                              stre=l

                                                                                                                                                                                              print "Result String Length : "+str(resStrLen)
                                                                                                                                                                                              print "Result String : " + a[strb:stre]









                                                                                                                                                                                              share|improve this answer























                                                                                                                                                                                                up vote
                                                                                                                                                                                                0
                                                                                                                                                                                                down vote










                                                                                                                                                                                                up vote
                                                                                                                                                                                                0
                                                                                                                                                                                                down vote









                                                                                                                                                                                                Algorithm:
                                                                                                                                                                                                1) Initialise an empty dictionary dct to check if any character already exists in the string.
                                                                                                                                                                                                2) cnt - to keep the count of substring without repeating characters.
                                                                                                                                                                                                3)l and r are the two pointers initialised to first index of the string.
                                                                                                                                                                                                4)loop through each char of the string.
                                                                                                                                                                                                5) If the character not present in the dct add itand increse the cnt.
                                                                                                                                                                                                6)If its already present then check if cnt is greater then resStrLen.
                                                                                                                                                                                                7)Remove the char from dct and shift the left pointer by 1 and decrease the count.
                                                                                                                                                                                                8)Repeat 5,6,7 till l,r greater or equal to length of the input string.
                                                                                                                                                                                                9)Have one more check at the end to handle cases like input string with non-repeating characters.

                                                                                                                                                                                                Here is the simple python program to Find longest substring without repeating characters




                                                                                                                                                                                                a="stackoverflow"
                                                                                                                                                                                                strLength = len(a)
                                                                                                                                                                                                dct={}
                                                                                                                                                                                                resStrLen=0
                                                                                                                                                                                                cnt=0
                                                                                                                                                                                                l=0
                                                                                                                                                                                                r=0
                                                                                                                                                                                                strb=l
                                                                                                                                                                                                stre=l
                                                                                                                                                                                                while(l<strLength and r<strLength):
                                                                                                                                                                                                if a[l] in dct:
                                                                                                                                                                                                if cnt>resStrLen:
                                                                                                                                                                                                resStrLen=cnt
                                                                                                                                                                                                strb=r
                                                                                                                                                                                                stre=l
                                                                                                                                                                                                dct.pop(a[r])
                                                                                                                                                                                                cnt=cnt-1
                                                                                                                                                                                                r+=1
                                                                                                                                                                                                else:
                                                                                                                                                                                                cnt+=1
                                                                                                                                                                                                dct[a[l]]=1
                                                                                                                                                                                                l+=1

                                                                                                                                                                                                if cnt>resStrLen:
                                                                                                                                                                                                resStrLen=cnt
                                                                                                                                                                                                strb=r
                                                                                                                                                                                                stre=l

                                                                                                                                                                                                print "Result String Length : "+str(resStrLen)
                                                                                                                                                                                                print "Result String : " + a[strb:stre]









                                                                                                                                                                                                share|improve this answer












                                                                                                                                                                                                Algorithm:
                                                                                                                                                                                                1) Initialise an empty dictionary dct to check if any character already exists in the string.
                                                                                                                                                                                                2) cnt - to keep the count of substring without repeating characters.
                                                                                                                                                                                                3)l and r are the two pointers initialised to first index of the string.
                                                                                                                                                                                                4)loop through each char of the string.
                                                                                                                                                                                                5) If the character not present in the dct add itand increse the cnt.
                                                                                                                                                                                                6)If its already present then check if cnt is greater then resStrLen.
                                                                                                                                                                                                7)Remove the char from dct and shift the left pointer by 1 and decrease the count.
                                                                                                                                                                                                8)Repeat 5,6,7 till l,r greater or equal to length of the input string.
                                                                                                                                                                                                9)Have one more check at the end to handle cases like input string with non-repeating characters.

                                                                                                                                                                                                Here is the simple python program to Find longest substring without repeating characters




                                                                                                                                                                                                a="stackoverflow"
                                                                                                                                                                                                strLength = len(a)
                                                                                                                                                                                                dct={}
                                                                                                                                                                                                resStrLen=0
                                                                                                                                                                                                cnt=0
                                                                                                                                                                                                l=0
                                                                                                                                                                                                r=0
                                                                                                                                                                                                strb=l
                                                                                                                                                                                                stre=l
                                                                                                                                                                                                while(l<strLength and r<strLength):
                                                                                                                                                                                                if a[l] in dct:
                                                                                                                                                                                                if cnt>resStrLen:
                                                                                                                                                                                                resStrLen=cnt
                                                                                                                                                                                                strb=r
                                                                                                                                                                                                stre=l
                                                                                                                                                                                                dct.pop(a[r])
                                                                                                                                                                                                cnt=cnt-1
                                                                                                                                                                                                r+=1
                                                                                                                                                                                                else:
                                                                                                                                                                                                cnt+=1
                                                                                                                                                                                                dct[a[l]]=1
                                                                                                                                                                                                l+=1

                                                                                                                                                                                                if cnt>resStrLen:
                                                                                                                                                                                                resStrLen=cnt
                                                                                                                                                                                                strb=r
                                                                                                                                                                                                stre=l

                                                                                                                                                                                                print "Result String Length : "+str(resStrLen)
                                                                                                                                                                                                print "Result String : " + a[strb:stre]










                                                                                                                                                                                                share|improve this answer












                                                                                                                                                                                                share|improve this answer



                                                                                                                                                                                                share|improve this answer










                                                                                                                                                                                                answered Nov 11 at 4:31









                                                                                                                                                                                                Vishwanath Hiremath

                                                                                                                                                                                                8513




                                                                                                                                                                                                8513






















                                                                                                                                                                                                    up vote
                                                                                                                                                                                                    0
                                                                                                                                                                                                    down vote













                                                                                                                                                                                                    The solution in C.



                                                                                                                                                                                                    #include<stdio.h>
                                                                                                                                                                                                    #include <string.h>

                                                                                                                                                                                                    void longstr(char* a, int *start, int *last)
                                                                                                                                                                                                    {
                                                                                                                                                                                                    *start = *last = 0;
                                                                                                                                                                                                    int visited[256];
                                                                                                                                                                                                    for (int i = 0; i < 256; i++)
                                                                                                                                                                                                    {
                                                                                                                                                                                                    visited[i] = -1;
                                                                                                                                                                                                    }
                                                                                                                                                                                                    int max_len = 0;
                                                                                                                                                                                                    int cur_len = 0;
                                                                                                                                                                                                    int prev_index;
                                                                                                                                                                                                    visited[a[0]] = 0;
                                                                                                                                                                                                    for (int i = 1; i < strlen(a); i++)
                                                                                                                                                                                                    {
                                                                                                                                                                                                    prev_index = visited[a[i]];
                                                                                                                                                                                                    if (prev_index == -1 || i - cur_len > prev_index)
                                                                                                                                                                                                    {
                                                                                                                                                                                                    cur_len++;
                                                                                                                                                                                                    *last = i;
                                                                                                                                                                                                    }
                                                                                                                                                                                                    else
                                                                                                                                                                                                    {
                                                                                                                                                                                                    if (max_len < cur_len)
                                                                                                                                                                                                    {
                                                                                                                                                                                                    *start = *last - cur_len;
                                                                                                                                                                                                    max_len = cur_len;
                                                                                                                                                                                                    }
                                                                                                                                                                                                    cur_len = i - prev_index;
                                                                                                                                                                                                    }
                                                                                                                                                                                                    visited[a[i]] = i;
                                                                                                                                                                                                    }
                                                                                                                                                                                                    if (max_len < cur_len)
                                                                                                                                                                                                    {
                                                                                                                                                                                                    *start = *last - cur_len;
                                                                                                                                                                                                    max_len = cur_len;
                                                                                                                                                                                                    }
                                                                                                                                                                                                    }

                                                                                                                                                                                                    int main()
                                                                                                                                                                                                    {
                                                                                                                                                                                                    char str = "ABDEFGABEF";
                                                                                                                                                                                                    printf("The input string is %s n", str);
                                                                                                                                                                                                    int start, last;
                                                                                                                                                                                                    longstr(str, &start, &last);
                                                                                                                                                                                                    //printf("n %d %d n", start, last);
                                                                                                                                                                                                    memmove(str, (str + start), last - start);
                                                                                                                                                                                                    str[last] = '';
                                                                                                                                                                                                    printf("the longest non-repeating character substring is %s", str);
                                                                                                                                                                                                    return 0;
                                                                                                                                                                                                    }





                                                                                                                                                                                                    share|improve this answer

























                                                                                                                                                                                                      up vote
                                                                                                                                                                                                      0
                                                                                                                                                                                                      down vote













                                                                                                                                                                                                      The solution in C.



                                                                                                                                                                                                      #include<stdio.h>
                                                                                                                                                                                                      #include <string.h>

                                                                                                                                                                                                      void longstr(char* a, int *start, int *last)
                                                                                                                                                                                                      {
                                                                                                                                                                                                      *start = *last = 0;
                                                                                                                                                                                                      int visited[256];
                                                                                                                                                                                                      for (int i = 0; i < 256; i++)
                                                                                                                                                                                                      {
                                                                                                                                                                                                      visited[i] = -1;
                                                                                                                                                                                                      }
                                                                                                                                                                                                      int max_len = 0;
                                                                                                                                                                                                      int cur_len = 0;
                                                                                                                                                                                                      int prev_index;
                                                                                                                                                                                                      visited[a[0]] = 0;
                                                                                                                                                                                                      for (int i = 1; i < strlen(a); i++)
                                                                                                                                                                                                      {
                                                                                                                                                                                                      prev_index = visited[a[i]];
                                                                                                                                                                                                      if (prev_index == -1 || i - cur_len > prev_index)
                                                                                                                                                                                                      {
                                                                                                                                                                                                      cur_len++;
                                                                                                                                                                                                      *last = i;
                                                                                                                                                                                                      }
                                                                                                                                                                                                      else
                                                                                                                                                                                                      {
                                                                                                                                                                                                      if (max_len < cur_len)
                                                                                                                                                                                                      {
                                                                                                                                                                                                      *start = *last - cur_len;
                                                                                                                                                                                                      max_len = cur_len;
                                                                                                                                                                                                      }
                                                                                                                                                                                                      cur_len = i - prev_index;
                                                                                                                                                                                                      }
                                                                                                                                                                                                      visited[a[i]] = i;
                                                                                                                                                                                                      }
                                                                                                                                                                                                      if (max_len < cur_len)
                                                                                                                                                                                                      {
                                                                                                                                                                                                      *start = *last - cur_len;
                                                                                                                                                                                                      max_len = cur_len;
                                                                                                                                                                                                      }
                                                                                                                                                                                                      }

                                                                                                                                                                                                      int main()
                                                                                                                                                                                                      {
                                                                                                                                                                                                      char str = "ABDEFGABEF";
                                                                                                                                                                                                      printf("The input string is %s n", str);
                                                                                                                                                                                                      int start, last;
                                                                                                                                                                                                      longstr(str, &start, &last);
                                                                                                                                                                                                      //printf("n %d %d n", start, last);
                                                                                                                                                                                                      memmove(str, (str + start), last - start);
                                                                                                                                                                                                      str[last] = '';
                                                                                                                                                                                                      printf("the longest non-repeating character substring is %s", str);
                                                                                                                                                                                                      return 0;
                                                                                                                                                                                                      }





                                                                                                                                                                                                      share|improve this answer























                                                                                                                                                                                                        up vote
                                                                                                                                                                                                        0
                                                                                                                                                                                                        down vote










                                                                                                                                                                                                        up vote
                                                                                                                                                                                                        0
                                                                                                                                                                                                        down vote









                                                                                                                                                                                                        The solution in C.



                                                                                                                                                                                                        #include<stdio.h>
                                                                                                                                                                                                        #include <string.h>

                                                                                                                                                                                                        void longstr(char* a, int *start, int *last)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        *start = *last = 0;
                                                                                                                                                                                                        int visited[256];
                                                                                                                                                                                                        for (int i = 0; i < 256; i++)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        visited[i] = -1;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        int max_len = 0;
                                                                                                                                                                                                        int cur_len = 0;
                                                                                                                                                                                                        int prev_index;
                                                                                                                                                                                                        visited[a[0]] = 0;
                                                                                                                                                                                                        for (int i = 1; i < strlen(a); i++)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        prev_index = visited[a[i]];
                                                                                                                                                                                                        if (prev_index == -1 || i - cur_len > prev_index)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        cur_len++;
                                                                                                                                                                                                        *last = i;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        else
                                                                                                                                                                                                        {
                                                                                                                                                                                                        if (max_len < cur_len)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        *start = *last - cur_len;
                                                                                                                                                                                                        max_len = cur_len;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        cur_len = i - prev_index;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        visited[a[i]] = i;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if (max_len < cur_len)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        *start = *last - cur_len;
                                                                                                                                                                                                        max_len = cur_len;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        }

                                                                                                                                                                                                        int main()
                                                                                                                                                                                                        {
                                                                                                                                                                                                        char str = "ABDEFGABEF";
                                                                                                                                                                                                        printf("The input string is %s n", str);
                                                                                                                                                                                                        int start, last;
                                                                                                                                                                                                        longstr(str, &start, &last);
                                                                                                                                                                                                        //printf("n %d %d n", start, last);
                                                                                                                                                                                                        memmove(str, (str + start), last - start);
                                                                                                                                                                                                        str[last] = '';
                                                                                                                                                                                                        printf("the longest non-repeating character substring is %s", str);
                                                                                                                                                                                                        return 0;
                                                                                                                                                                                                        }





                                                                                                                                                                                                        share|improve this answer












                                                                                                                                                                                                        The solution in C.



                                                                                                                                                                                                        #include<stdio.h>
                                                                                                                                                                                                        #include <string.h>

                                                                                                                                                                                                        void longstr(char* a, int *start, int *last)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        *start = *last = 0;
                                                                                                                                                                                                        int visited[256];
                                                                                                                                                                                                        for (int i = 0; i < 256; i++)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        visited[i] = -1;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        int max_len = 0;
                                                                                                                                                                                                        int cur_len = 0;
                                                                                                                                                                                                        int prev_index;
                                                                                                                                                                                                        visited[a[0]] = 0;
                                                                                                                                                                                                        for (int i = 1; i < strlen(a); i++)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        prev_index = visited[a[i]];
                                                                                                                                                                                                        if (prev_index == -1 || i - cur_len > prev_index)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        cur_len++;
                                                                                                                                                                                                        *last = i;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        else
                                                                                                                                                                                                        {
                                                                                                                                                                                                        if (max_len < cur_len)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        *start = *last - cur_len;
                                                                                                                                                                                                        max_len = cur_len;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        cur_len = i - prev_index;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        visited[a[i]] = i;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if (max_len < cur_len)
                                                                                                                                                                                                        {
                                                                                                                                                                                                        *start = *last - cur_len;
                                                                                                                                                                                                        max_len = cur_len;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        }

                                                                                                                                                                                                        int main()
                                                                                                                                                                                                        {
                                                                                                                                                                                                        char str = "ABDEFGABEF";
                                                                                                                                                                                                        printf("The input string is %s n", str);
                                                                                                                                                                                                        int start, last;
                                                                                                                                                                                                        longstr(str, &start, &last);
                                                                                                                                                                                                        //printf("n %d %d n", start, last);
                                                                                                                                                                                                        memmove(str, (str + start), last - start);
                                                                                                                                                                                                        str[last] = '';
                                                                                                                                                                                                        printf("the longest non-repeating character substring is %s", str);
                                                                                                                                                                                                        return 0;
                                                                                                                                                                                                        }






                                                                                                                                                                                                        share|improve this answer












                                                                                                                                                                                                        share|improve this answer



                                                                                                                                                                                                        share|improve this answer










                                                                                                                                                                                                        answered Nov 24 at 4:41









                                                                                                                                                                                                        Mukesh Bharsakle

                                                                                                                                                                                                        82110




                                                                                                                                                                                                        82110






















                                                                                                                                                                                                            up vote
                                                                                                                                                                                                            -1
                                                                                                                                                                                                            down vote













                                                                                                                                                                                                            private static string LongestSubstring(string word)
                                                                                                                                                                                                            {
                                                                                                                                                                                                            var set = new HashSet<char>();
                                                                                                                                                                                                            string longestOverAll = "";
                                                                                                                                                                                                            string longestTillNow = "";

                                                                                                                                                                                                            foreach (char c in word)
                                                                                                                                                                                                            {
                                                                                                                                                                                                            if (!set.Contains(c))
                                                                                                                                                                                                            {
                                                                                                                                                                                                            longestTillNow += c;
                                                                                                                                                                                                            set.Add(c);
                                                                                                                                                                                                            }
                                                                                                                                                                                                            else
                                                                                                                                                                                                            {
                                                                                                                                                                                                            longestTillNow = string.Empty;
                                                                                                                                                                                                            }

                                                                                                                                                                                                            if (longestTillNow.Length > longestOverAll.Length)
                                                                                                                                                                                                            {
                                                                                                                                                                                                            longestOverAll = longestTillNow;
                                                                                                                                                                                                            }
                                                                                                                                                                                                            }

                                                                                                                                                                                                            return longestOverAll;
                                                                                                                                                                                                            }





                                                                                                                                                                                                            share|improve this answer

























                                                                                                                                                                                                              up vote
                                                                                                                                                                                                              -1
                                                                                                                                                                                                              down vote













                                                                                                                                                                                                              private static string LongestSubstring(string word)
                                                                                                                                                                                                              {
                                                                                                                                                                                                              var set = new HashSet<char>();
                                                                                                                                                                                                              string longestOverAll = "";
                                                                                                                                                                                                              string longestTillNow = "";

                                                                                                                                                                                                              foreach (char c in word)
                                                                                                                                                                                                              {
                                                                                                                                                                                                              if (!set.Contains(c))
                                                                                                                                                                                                              {
                                                                                                                                                                                                              longestTillNow += c;
                                                                                                                                                                                                              set.Add(c);
                                                                                                                                                                                                              }
                                                                                                                                                                                                              else
                                                                                                                                                                                                              {
                                                                                                                                                                                                              longestTillNow = string.Empty;
                                                                                                                                                                                                              }

                                                                                                                                                                                                              if (longestTillNow.Length > longestOverAll.Length)
                                                                                                                                                                                                              {
                                                                                                                                                                                                              longestOverAll = longestTillNow;
                                                                                                                                                                                                              }
                                                                                                                                                                                                              }

                                                                                                                                                                                                              return longestOverAll;
                                                                                                                                                                                                              }





                                                                                                                                                                                                              share|improve this answer























                                                                                                                                                                                                                up vote
                                                                                                                                                                                                                -1
                                                                                                                                                                                                                down vote










                                                                                                                                                                                                                up vote
                                                                                                                                                                                                                -1
                                                                                                                                                                                                                down vote









                                                                                                                                                                                                                private static string LongestSubstring(string word)
                                                                                                                                                                                                                {
                                                                                                                                                                                                                var set = new HashSet<char>();
                                                                                                                                                                                                                string longestOverAll = "";
                                                                                                                                                                                                                string longestTillNow = "";

                                                                                                                                                                                                                foreach (char c in word)
                                                                                                                                                                                                                {
                                                                                                                                                                                                                if (!set.Contains(c))
                                                                                                                                                                                                                {
                                                                                                                                                                                                                longestTillNow += c;
                                                                                                                                                                                                                set.Add(c);
                                                                                                                                                                                                                }
                                                                                                                                                                                                                else
                                                                                                                                                                                                                {
                                                                                                                                                                                                                longestTillNow = string.Empty;
                                                                                                                                                                                                                }

                                                                                                                                                                                                                if (longestTillNow.Length > longestOverAll.Length)
                                                                                                                                                                                                                {
                                                                                                                                                                                                                longestOverAll = longestTillNow;
                                                                                                                                                                                                                }
                                                                                                                                                                                                                }

                                                                                                                                                                                                                return longestOverAll;
                                                                                                                                                                                                                }





                                                                                                                                                                                                                share|improve this answer












                                                                                                                                                                                                                private static string LongestSubstring(string word)
                                                                                                                                                                                                                {
                                                                                                                                                                                                                var set = new HashSet<char>();
                                                                                                                                                                                                                string longestOverAll = "";
                                                                                                                                                                                                                string longestTillNow = "";

                                                                                                                                                                                                                foreach (char c in word)
                                                                                                                                                                                                                {
                                                                                                                                                                                                                if (!set.Contains(c))
                                                                                                                                                                                                                {
                                                                                                                                                                                                                longestTillNow += c;
                                                                                                                                                                                                                set.Add(c);
                                                                                                                                                                                                                }
                                                                                                                                                                                                                else
                                                                                                                                                                                                                {
                                                                                                                                                                                                                longestTillNow = string.Empty;
                                                                                                                                                                                                                }

                                                                                                                                                                                                                if (longestTillNow.Length > longestOverAll.Length)
                                                                                                                                                                                                                {
                                                                                                                                                                                                                longestOverAll = longestTillNow;
                                                                                                                                                                                                                }
                                                                                                                                                                                                                }

                                                                                                                                                                                                                return longestOverAll;
                                                                                                                                                                                                                }






                                                                                                                                                                                                                share|improve this answer












                                                                                                                                                                                                                share|improve this answer



                                                                                                                                                                                                                share|improve this answer










                                                                                                                                                                                                                answered Dec 18 '12 at 11:16









                                                                                                                                                                                                                Omar Gamil

                                                                                                                                                                                                                91129




                                                                                                                                                                                                                91129






















                                                                                                                                                                                                                    up vote
                                                                                                                                                                                                                    -1
                                                                                                                                                                                                                    down vote













                                                                                                                                                                                                                    private static String LongestSubString(String word)
                                                                                                                                                                                                                    {
                                                                                                                                                                                                                    char charArray = word.toCharArray();
                                                                                                                                                                                                                    HashSet set = new HashSet();
                                                                                                                                                                                                                    String longestOverAll = "";
                                                                                                                                                                                                                    String longestTillNow = "";
                                                                                                                                                                                                                    for (int i = 0; i < charArray.length; i++) {
                                                                                                                                                                                                                    Character c = charArray[i];

                                                                                                                                                                                                                    if (set.contains(c)) {
                                                                                                                                                                                                                    longestTillNow = "";
                                                                                                                                                                                                                    set.clear();
                                                                                                                                                                                                                    }
                                                                                                                                                                                                                    longestTillNow += c;
                                                                                                                                                                                                                    set.add(c);
                                                                                                                                                                                                                    if (longestTillNow.length() > longestOverAll.length())
                                                                                                                                                                                                                    {
                                                                                                                                                                                                                    longestOverAll = longestTillNow;

                                                                                                                                                                                                                    }
                                                                                                                                                                                                                    }

                                                                                                                                                                                                                    return longestOverAll;
                                                                                                                                                                                                                    }





                                                                                                                                                                                                                    share|improve this answer

















                                                                                                                                                                                                                    • 1




                                                                                                                                                                                                                      Why are you simply posting the same answer again? Just for the sake of reputations?
                                                                                                                                                                                                                      – Kaveesh Kanwal
                                                                                                                                                                                                                      Apr 29 '15 at 10:58















                                                                                                                                                                                                                    up vote
                                                                                                                                                                                                                    -1
                                                                                                                                                                                                                    down vote













                                                                                                                                                                                                                    private static String LongestSubString(String word)
                                                                                                                                                                                                                    {
                                                                                                                                                                                                                    char charArray = word.toCharArray();
                                                                                                                                                                                                                    HashSet set = new HashSet();
                                                                                                                                                                                                                    String longestOverAll = "";
                                                                                                                                                                                                                    String longestTillNow = "";
                                                                                                                                                                                                                    for (int i = 0; i < charArray.length; i++) {
                                                                                                                                                                                                                    Character c = charArray[i];

                                                                                                                                                                                                                    if (set.contains(c)) {
                                                                                                                                                                                                                    longestTillNow = "";
                                                                                                                                                                                                                    set.clear();
                                                                                                                                                                                                                    }
                                                                                                                                                                                                                    longestTillNow += c;
                                                                                                                                                                                                                    set.add(c);
                                                                                                                                                                                                                    if (longestTillNow.length() > longestOverAll.length())
                                                                                                                                                                                                                    {
                                                                                                                                                                                                                    longestOverAll = longestTillNow;

                                                                                                                                                                                                                    }
                                                                                                                                                                                                                    }

                                                                                                                                                                                                                    return longestOverAll;
                                                                                                                                                                                                                    }





                                                                                                                                                                                                                    share|improve this answer

















                                                                                                                                                                                                                    • 1




                                                                                                                                                                                                                      Why are you simply posting the same answer again? Just for the sake of reputations?
                                                                                                                                                                                                                      – Kaveesh Kanwal
                                                                                                                                                                                                                      Apr 29 '15 at 10:58













                                                                                                                                                                                                                    up vote
                                                                                                                                                                                                                    -1
                                                                                                                                                                                                                    down vote










                                                                                                                                                                                                                    up vote
                                                                                                                                                                                                                    -1
                                                                                                                                                                                                                    down vote









                                                                                                                                                                                                                    private static String LongestSubString(String word)
                                                                                                                                                                                                                    {
                                                                                                                                                                                                                    char charArray = word.toCharArray();
                                                                                                                                                                                                                    HashSet set = new HashSet();
                                                                                                                                                                                                                    String longestOverAll = "";
                                                                                                                                                                                                                    String longestTillNow = "";
                                                                                                                                                                                                                    for (int i = 0; i < charArray.length; i++) {
                                                                                                                                                                                                                    Character c = charArray[i];

                                                                                                                                                                                                                    if (set.contains(c)) {
                                                                                                                                                                                                                    longestTillNow = "";
                                                                                                                                                                                                                    set.clear();
                                                                                                                                                                                                                    }
                                                                                                                                                                                                                    longestTillNow += c;
                                                                                                                                                                                                                    set.add(c);
                                                                                                                                                                                                                    if (longestTillNow.length() > longestOverAll.length())
                                                                                                                                                                                                                    {
                                                                                                                                                                                                                    longestOverAll = longestTillNow;

                                                                                                                                                                                                                    }
                                                                                                                                                                                                                    }

                                                                                                                                                                                                                    return longestOverAll;
                                                                                                                                                                                                                    }





                                                                                                                                                                                                                    share|improve this answer












                                                                                                                                                                                                                    private static String LongestSubString(String word)
                                                                                                                                                                                                                    {
                                                                                                                                                                                                                    char charArray = word.toCharArray();
                                                                                                                                                                                                                    HashSet set = new HashSet();
                                                                                                                                                                                                                    String longestOverAll = "";
                                                                                                                                                                                                                    String longestTillNow = "";
                                                                                                                                                                                                                    for (int i = 0; i < charArray.length; i++) {
                                                                                                                                                                                                                    Character c = charArray[i];

                                                                                                                                                                                                                    if (set.contains(c)) {
                                                                                                                                                                                                                    longestTillNow = "";
                                                                                                                                                                                                                    set.clear();
                                                                                                                                                                                                                    }
                                                                                                                                                                                                                    longestTillNow += c;
                                                                                                                                                                                                                    set.add(c);
                                                                                                                                                                                                                    if (longestTillNow.length() > longestOverAll.length())
                                                                                                                                                                                                                    {
                                                                                                                                                                                                                    longestOverAll = longestTillNow;

                                                                                                                                                                                                                    }
                                                                                                                                                                                                                    }

                                                                                                                                                                                                                    return longestOverAll;
                                                                                                                                                                                                                    }






                                                                                                                                                                                                                    share|improve this answer












                                                                                                                                                                                                                    share|improve this answer



                                                                                                                                                                                                                    share|improve this answer










                                                                                                                                                                                                                    answered Feb 2 '14 at 15:07









                                                                                                                                                                                                                    Lei

                                                                                                                                                                                                                    3913




                                                                                                                                                                                                                    3913








                                                                                                                                                                                                                    • 1




                                                                                                                                                                                                                      Why are you simply posting the same answer again? Just for the sake of reputations?
                                                                                                                                                                                                                      – Kaveesh Kanwal
                                                                                                                                                                                                                      Apr 29 '15 at 10:58














                                                                                                                                                                                                                    • 1




                                                                                                                                                                                                                      Why are you simply posting the same answer again? Just for the sake of reputations?
                                                                                                                                                                                                                      – Kaveesh Kanwal
                                                                                                                                                                                                                      Apr 29 '15 at 10:58








                                                                                                                                                                                                                    1




                                                                                                                                                                                                                    1




                                                                                                                                                                                                                    Why are you simply posting the same answer again? Just for the sake of reputations?
                                                                                                                                                                                                                    – Kaveesh Kanwal
                                                                                                                                                                                                                    Apr 29 '15 at 10:58




                                                                                                                                                                                                                    Why are you simply posting the same answer again? Just for the sake of reputations?
                                                                                                                                                                                                                    – Kaveesh Kanwal
                                                                                                                                                                                                                    Apr 29 '15 at 10:58





                                                                                                                                                                                                                    protected by Community Apr 19 '17 at 11:33



                                                                                                                                                                                                                    Thank you for your interest in this question.
                                                                                                                                                                                                                    Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                                                                                                                                                                                                                    Would you like to answer one of these unanswered questions instead?



                                                                                                                                                                                                                    Popular posts from this blog

                                                                                                                                                                                                                    Xamarin.iOS Cant Deploy on Iphone

                                                                                                                                                                                                                    Glorious Revolution

                                                                                                                                                                                                                    Dulmage-Mendelsohn matrix decomposition in Python