BD12. 最大子序列
描述
对于字符串x和y, 如果擦除x中的某些字母(有可能全擦掉或者都不擦)能够得到y,我们就称y是x的子序列。例如."ncd"是"nowcoder"的子序列,而"xt"不是。输入描述
输入包括一行,一个字符串s,字符串s长度length(1 ≤ length ≤ 50). s中每个字符都是小写字母输出描述
输出一个字符串,即字典序最大的s的子序列。示例1
输入:
test
输出:
tt
C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2020-08-21
#include<stdio.h> int main(void){ char a[50] = {0}; char b[50] = {0}; scanf("%s", &a); int n = strlen(a); int i, j, k = 1; b[0] = a[0]; for (i = 1; i < n; i++){ for (j = 0; j < k; j++){ if (a[i] > b[j]){ b[j] = a[i]; b[j+1] = '\0'; k = j+1; }else if (j == k-1){ b[k++] = a[i]; b[k] = '\0'; break; } } } printf("%s\n", b); }
C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2018-08-09
#include <stdio.h> #include <stdlib.h> #include<string.h> char ans[100]={0}; void append(char a){ int l=strlen(ans); ans[l]=a; ans[l+1]=0; } void solu(char *s){ if(strlen(s)==0) return; if(strlen(s)==1) { append(s[0]); return; } int l=strlen(s); char max=-1; int index=-1; int i; for(i=0;i<l;i++){ if(max<s[i]){ max=s[i]; index=i; } } append(max); solu(&s[index+1]); } int main() { char s[1000]={0}; scanf("%s",s); solu(s); printf("%s",ans); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2019-04-28
#include <stdio.h> #include <stdlib.h> #include<string.h> char ans[100]={0}; void append(char a){ int l=strlen(ans); ans[l]=a; ans[l+1]=0; } void solu(char *s){ if(strlen(s)==0) return; if(strlen(s)==1) { append(s[0]); return; } int l=strlen(s); char max=-1; int index=-1; int i; for(i=0;i<l;i++){ if(max<s[i]){ max=s[i]; index=i; } } append(max); solu(&s[index+1]); } int main() { char s[1000]={0}; scanf("%s",s); solu(s); printf("%s",ans); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2020-11-14
#include <stdio.h> #include <string.h> int MaxSubSequence(char* s, char* res){ int len = strlen(s); if(len == 0){ res[0] = '\0'; return 0; } char max = 0x00; int index = -1; for(int i = 0; i < len; i++){ if((int)s[i] > (int)max){ max = s[i]; index = i; } } res[0] = max; return 1+MaxSubSequence((char*)(s+index+1), (char*)(res+1)); } int main(){ char* str = (char*)malloc(51*sizeof(char)); while(scanf("%s",str) != EOF){ char* res = (char*)malloc(51*sizeof(char)); MaxSubSequence(str, res); printf("%s\n",res); } }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-08-14
#include<stdio.h> #include<string.h> #include<limits.h> // int main() { char s[100]; char c; while( scanf("%s",&s)!=EOF) { char str[100]; int len=strlen(s); int i=0,m,maxc,k=0,t; //跟我的有点像,但是我的是死循环,跳不出来了, //本来自己写的while循环 while(i<len) { //每次最大值的比较都要重新开始 maxc=INT_MIN; for(int j=i;s[j]!='\0';j++) { if(s[j]-'a'>maxc) { maxc=s[j]-'a'; c=s[j]; m=j; } } str[k++]=c; // printf("%c",c); i=m+1; } for(t=0;t<k;t++) printf("%c",str[t]); printf("\n"); } return 0; }