KS6. 字符串长度最大乘积
描述
输入描述
Input:输出描述
Output:示例1
输入:
["a","ab","abc","cd","bcd","abcd"]
输出:
4
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-08-27
#include<stdio.h> int main(void) { char datain[100][50]; int len[100],Len[100*(100-1)/2][3]; int n=0,ans=0,count=0,mid,flag; getchar();//[ do { if(getchar()==']') {printf("0");return 0;}//" len[n] = 0; do { datain[n][len[n]] = getchar(); len[n]++; }while(datain[n][len[n]-1]!='\"'); len[n]--; datain[n][len[n]] = '\0'; for(int i=n-1;i>=0;i--){ Len[count][0] = len[n]*len[i]; Len[count][1] = n; Len[count][2] = i; count++; } n++; }while(getchar()!=']'); for(int i=0;i<count;i++){ for(int j=i;j>0;j--){ if(Len[j][0]>Len[j-1][0]){ mid = Len[j][0]; Len[j][0] = Len[j-1][0]; Len[j-1][0] = mid; mid = Len[j][1]; Len[j][1] = Len[j-1][1]; Len[j-1][1] = mid; mid = Len[j][2]; Len[j][2] = Len[j-1][2]; Len[j-1][2] = mid; } } } for(int i=0;i<count;i++){ flag = 0; for(int j=0;j<len[Len[i][1]];j++){ for(int k=0;k<len[Len[i][2]];k++){ if(datain[Len[i][1]][j]==datain[Len[i][2]][k]){ flag = 1; break; } } if(flag==1) break; } if(flag==0){ ans = Len[i][0]; break; } } printf("%d",ans); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 224KB, 提交时间: 2019-08-28
#include<stdio.h> #include<string.h> int main() { int bijiao(char *s,char *p); int max(int *s,int n); char input[10][10]; int j=0,start=0; char c[20]; int sum[100]={}; int len[50]; int z=0,flag=0; int summ=0; scanf("%s",c); for(int i=0;i<strlen(c);i++) { if(*(c+start)=='"') { start++; if(*(c+start)=='"') { input[j][0]='\0'; j++; flag=1; z=0; } while(*(c+start)!='"') { input[j][z]=*(c+start); start++; z++; flag=0; } if(flag==0) { input[j][z]='\0'; j++; } z=0; } start++; } for(int i=0;i<j;i++) { len[i]=strlen(*(input+i)); } for(int i=0;i<j-1;i++) { for(int z=i+1;z<j;z++) { if(bijiao(*(input+i),*(input+z))) { sum[summ]=len[i]*len[z]; summ++; } } } printf("%d\n",max(sum,summ)); return 0; } int bijiao(char *s,char *p) { int success=1; for(int i=0;i<strlen(s);i++) { for(int j=0;j<strlen(p);j++) { if(*(s+i)==*(p+j)) { success=0; } } } return success; } int max(int *s,int n) { int max=s[0]; for(int i=1;i<n;i++) { if(*(s+i)>max) { max=*(s+i); } } return max; }
C 解法, 执行用时: 2ms, 内存消耗: 344KB, 提交时间: 2021-09-18
#include<stdio.h> #include<string.h> #include<stdlib.h> int cmpchar(const void*a,const void*b) { return *(char*)a- *(char*)b; } int cmpint(const void*a,const void*b) { return *(int*)b- *(int*)a; } int main() { char* cc = (char*)malloc(sizeof(char)*100); char** c = (char**)malloc(sizeof(char*)*100); c[0] = (char*)malloc(sizeof(char)*100); int len1=0,len2=0,len=0; int num=0,t=0; int* length = (int*)malloc(sizeof(int)*100000); scanf("%s",cc); len = strlen(cc); for(int i=0;i<len;) { if(cc[i] == '[' || cc[i] == ']' || cc[i] == '"' || cc[i] == ',') { i++; continue; } int l=0; while(cc[i] != '[' && cc[i] != ']' && cc[i] != '"' && cc[i] != ',') { c[num][l++] = cc[i]; i++; } num++; c[num] = (char*)malloc(sizeof(char)*100); } for(int i=0;i<num-1;i++) { for(int j=i+1;j<num;j++) { len1 = strlen(c[i]); len2 = strlen(c[j]); qsort(c[i],len1,sizeof(char),cmpchar); qsort(c[j],len2,sizeof(char),cmpchar); if(c[i][0] > c[j][len2-1] ||c[i][len1-1] < c[j][0]) { length[t++] = (len1*len2); } else continue; } } qsort(length,t,sizeof(int),cmpint); printf("%d",length[0]); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2020-03-11
#include<stdio.h> #include<string.h> #define more(x,y) x>y?x:y int cmp(char s[],char p[]) { int success=1; for(int i = 0;i < strlen(s);i++) { for(int j=0;j< strlen(p);j++) { if(s[i] == p[j]) { success=0; break; } } } return success; } int main() { char input[10][10]; int j = 0; char s[50]; int len[50]; int max = 0; scanf("%s",s); for(int i = 0;i < strlen(s);i++) { if(s[i] == '[') continue; else if(s[i] == ']') break; else if(s[i] == '"'){ if(s[i+1] != ',' && s[i+1] != ']'){ int k; for(k = 1;s[i+k] != '"';k++){ input[j][k-1] = s[i+k]; } input[j][k-1] = '\0'; i = i+k; j++; } else if(s[i+1] == ',') i++; else break; } } for(int i=0;i < j;i++) { len[i]=strlen(input[i]); //printf("%s %d\n",input[i],len[i]); } for(int i = 0;i < j-1;i++) { for(int k=i+1;k < j;k++) { if(cmp(input[i],input[k])) { int temp = len[i]*len[k]; max = more(temp,max); } } } printf("%d\n",max); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2021-05-18
#include <stdio.h> #include <string.h> int func(char *s1, char *s2) { int arr[26] = {0}; for(int i=0; i<strlen(s1); i++) { arr[s1[i]-'a']++; } int j=0; for(j=0; j<strlen(s2); j++) { if(arr[s2[j]-'a'] != 0){ break; } } if(j == strlen(s2)){return strlen(s2)*strlen(s1);} else{ return -1; } } int main(void) { char str[1000] = {0}; while(scanf("%s", str) != EOF) { char astr[100][100] = {'\0'}; int a=0, b=0; for(int k=0; k<strlen(str); k++) { if(str[k]>='a' && str[k]<='z'){ astr[a][b] = str[k]; b++; } else if(str[k] == ','){ a++; b = 0; } } int arr[26] = {0}; int max = 0; for(int i=0; i<=a; i++) { if(strlen(astr[i]) == 0){ continue; } for(int j=i+1; j<=a; j++){ int ret = func(astr[i], astr[j]); if(max < ret){max = ret;} } } printf("%d\n", max); } return 0; }