OR69. 字符串组合
描述
输入一个字符串,输出该字符串中相邻字符的所有组合。输入描述
一个字符串输出描述
一行,每个组合以空格分隔,相同长度的组合需要以字典序排序,且去重。示例1
输入:
bac
输出:
a b c ac ba bac
C 解法, 执行用时: 2ms, 内存消耗: 232KB, 提交时间: 2019-06-05
#include <stdio.h> #include <string.h> void Gstr(char s[1000], int i, int len); int main(){ char s[1000]; scanf("%s",s); int len= strlen(s); int i; for(i=1; i<=len; i++) Gstr(s, i, len); return 0; } void Gstr(char s[1000], int n, int len){ char *s1[1000]; char *s2[1000]; int k=0, j=0, i=0; while(j<=len-n) { s1[k]= (char*)malloc(sizeof(char*) * 1); strncpy(s1[k],&s[j],n); s1[k][n]='\0'; k++; j+=1; } s2[0]=s1[0]; // 去重,每个元素与之前的若干元素比较。。。 int p=1; for(i=1;i<k;i++) { for(j=0;j<i;j++) { if(strcmp(s1[i],s1[j])==0) break; if(strcmp(s1[i],s1[j])!=0) continue; } if(i==j) { s2[p]=s1[i]; p++; } } char* t; // 排序 for(i=0;i<p-1;++i) { for(j=i+1;j<p;++j) { if(strcmp(s2[i],s2[j])>0) { t=s2[i]; s2[i]=s2[j]; s2[j]=t; } } } for(i=0;i<p;++i) printf("%s ",s2[i]); }
C 解法, 执行用时: 2ms, 内存消耗: 232KB, 提交时间: 2019-04-30
#include<stdio.h> #include<string.h> #include<stdlib.h> void zuhe(char s[1000],int n,int len); char a='a'; int main() { char str[1000]; scanf("%s",str); int len=strlen(str); int i; for(i=1;i<=len;i++) { zuhe(str,i,len); } return 0; } void zuhe(char s[1000],int n,int len) { int j=0; char *s1[1000]; char *s2[1000]; int k=0; int i=0; while(j<=len-n) { s1[k]= (char*)malloc(sizeof(char*) * 1); strncpy(s1[k],&s[j],n); s1[k][n]='\0'; k++; j+=1; } s2[0]=s1[0]; int p=1; for(i=1;i<k;i++) { for(j=0;j<i;j++) { if(strcmp(s1[i],s1[j])==0) { break; } if(strcmp(s1[i],s1[j])!=0) { continue; } } if(i==j) { s2[p]=s1[i]; p++; } } char*t; for(i=0;i<p-1;++i) { for(j=i+1;j<p;++j) { if(strcmp(s2[i],s2[j])>0) { t=s2[i]; s2[i]=s2[j]; s2[j]=t; } } } for(i=0;i<p;++i) { printf("%s ",s2[i]); } }