Sunday, 16 May 2021

Longest Substring with At Most K Distinct Characters

Given a string, find the longest substring that contains only two unique characters. For example, given "abcbbb-

bcccbdddadacb", the longest substring that contains 2 unique character is "bcbbbbcccb".


//maximum k distict allowed

public class LongestSubstringMostKDisinctChar {

    public static void main(String[] args) {

        String str = "ddacbbaccdedacebb";

        int i = -1;

        int j =-1;

        Map<Character, Integer> map = new HashMap<>();

        int length = 0;

        int k  = 3;


        while (true){

            boolean f1= false, f2 = false;

            //acquire

            while (i<str.length()-1){

                f1 = true;

                i++;

                char ch = str.charAt(i);

                if(map.containsKey(ch)){

                    map.put(ch,map.get(ch)+1);

                }else{

                    map.put(ch,1);

                }


                if(map.size()<=k){

                    length = Math.max(length,i-j);

                }else {

                    break;

                }


            }


            while (j<i){

                f2 = true;

                j++;


                char ch = str.charAt(j);

                Integer val = map.get(ch);

                if(val>1){

                    map.put(ch,map.get(ch)-1);

                }else{

                    map.remove(ch);

                }


                if(map.size()==k){

                    length = Math.max(length,i-j);

                    break;

                }


            }


            if(!f1 && !f2){

                break;

            }

            //release

        }

        System.out.println(length);



    }

}


Result: 7

No comments:

Post a Comment

links for Data Structure

  1) 𝐁𝐞𝐜𝐨𝐦𝐞 𝐌𝐚𝐬𝐭𝐞𝐫 𝐢𝐧 𝐋𝐢𝐧𝐤𝐞𝐝 𝐋𝐢𝐬𝐭:  https://lnkd.in/gXQux4zj 2) 𝐀𝐥𝐥 𝐭𝐲𝐩𝐞𝐬 𝐨𝐟 𝐓𝐫𝐞𝐞 𝐓𝐫𝐚𝐯𝐞𝐫𝐬𝐚𝐥𝐬...