BROKEN - Broken Keyboard - SPOJ Solution C++

  Problem Link : BROKEN  


👉 Hint : edit please

 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;
unordered_map<char,int> us;
int main()
{
	int m;
	while(scanf("%d",&m)!=EOF)
	{
	    if(m==0)
	        break;
		int i,k=0,ans=0;
		us.clear();
		string s;
		scanf("\n");
		getline(cin,s);
	
		int l=s.length();
	
    	for(i=0;i<l;i++)
	        us[s[i]]=0;
		for(i=0;i<l;i++)
		{
			if(us[s[i]]==0)
			{
				if(k==m)
					break;
			
				k++;
			}
            us[s[i]]++;
		}
		ans=max(ans,i);
    
		for(int j=1;j<l;j++)
		{
		    us[s[j-1]]--;
		    if(us[s[j-1]]<0)
		        us[s[j-1]]=0;
			if(us[s[j-1]]!=0)
				continue;

			k--;
			while(i<l)
			{
				if(k>=m && us[s[i]]==0)
					break;
				if(us[s[i]]==0)
					k++;
                us[s[i]]++;
				i++;
			}
			ans=max(ans,i-j);
		
		}
		
		cout<<ans<<endl;
	}
}

 

Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook. 

😇Happy Learning!!