You are given a string k times:
- if there is at least one letter 'a', remove the leftmost occurrence and stop the algorithm, otherwise go to next item;
- if there is at least one letter 'b', remove the leftmost occurrence and stop the algorithm, otherwise go to next item;
- ...
- remove the leftmost occurrence of the letter 'z' and stop the algorithm.
This algorithm removes a single letter from the string. Polycarp performs this algorithm exactly k characters.
Help Polycarp find the resulting string.
Input
The first line of input contains two integers 1≤k≤n≤4⋅105) — the length of the string and the number of letters Polycarp will remove.
The second line contains the string n lowercase Latin letters.
Output
Print the string that will be obtained from k times.
If the resulting string is empty, print nothing. It is allowed to print nothing or an empty line (line break).
Examples
Input
15 3
cccaabababaccbc
Output
cccbbabaccbc
Input
15 9
cccaabababaccbc
Output
cccccc
Input
1 1
u
Output
题目意思:给你一个含有n个字符的字符串,删除其中的k个字符,按照字典序列删除,即abcdef......,求出删除完成之后的字符串。
方法一:
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 struct node 6 { 7 int id;///字符在字符串中的位置 8 int vis;///是否删除的状态 9 char ch;///字符 10 } s[400010]; 11 char x[400010]; 12 int my_comp1(node a,node b)///先按照字典序排序升序,字典序相同时按照在字符串位置升序 13 { 14 if(a.ch==b.ch) 15 { 16 return a.id<b.id; 17 } 18 else 19 { 20 return a.ch-'a'<b.ch-'a'; 21 } 22 } 23 int my_comp2(node a,node b)///再按照在字符串中的位置升序 24 { 25 return a.id<b.id; 26 } 27 int main() 28 { 29 int n,k,i,len; 30 scanf("%d%d",&n,&k); 31 scanf("%s",x); 32 len=strlen(x); 33 for(i=0; i<len; i++) 34 { 35 s[i].ch=x[i]; 36 s[i].id=i; 37 s[i].vis=0; 38 } 39 sort(s,s+len,my_comp1); 40 for(i=0; i<k; i++) 41 { 42 s[i].vis=1; 43 } 44 sort(s,s+len,my_comp2); 45 for(i=0; i<len; i++) 46 { 47 if(s[i].vis==1) 48 { 49 continue; 50 } 51 else 52 { 53 printf("%c",s[i].ch); 54 } 55 } 56 printf("\n"); 57 return 0; 58 }
方法二:成批次地按照字典序删除字符,直到删够k个结束,时间复杂度会更低
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 char s[400010]; 6 char a[]="abcdefghijklmnopqrstuvwxyz"; 7 int main() 8 { 9 int n,k; 10 int i,j; 11 char ch; 12 while(scanf("%d%d",&n,&k)!=EOF) 13 { 14 getchar(); 15 scanf("%s",s); 16 j=0; 17 ch=a[j]; 18 while(1) 19 { 20 for(i=0; i<n; i++) 21 { 22 if(s[i]==ch) 23 { 24 s[i]=' '; 25 k--; 26 } 27 if(k==0) 28 { 29 break; 30 } 31 } 32 ch=a[++j]; 33 if(k==0) 34 { 35 break; 36 } 37 } 38 for(i=0;i<n;i++) 39 { 40 if(s[i]!=' ') 41 { 42 printf("%c",s[i]); 43 } 44 } 45 } 46 return 0; 47 }