取不重复的子串。
时间: 1ms 内存:128M
描述:
输入字母构成的字符串(不大于30字符)从中读取3个不重复的字符,求所有取法,取出的字符串按升序排列。不同取法输出顺序可以不考虑。
输入:
输入一串字符(不超过30个)
输出:
从中读取3个不重复的字符,求所有取法,取出的字符串按升序排列。
示例输入:
abcd
示例输出:
abc
abd
acd
bcd
提示:
参考答案(内存最优[1092]):
#include <stdio.h>
int main()
{
int i,j,b;
char a[100];
gets(a);
for(i=0;a[i]!='\0';i++)
for(j=i;a[j]!='\0';j++)
for(b=j;a[b]!='\0';b++)
if(a[i]!=a[j]&&a[j]!=a[b]&&a[i]!=a[b])
printf("%c%c%c\n",a[i],a[j],a[b]);
return 0;
}
参考答案(时间最优[0]):
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
void getdf(char arr1[],char arr2[])
{
int len1=strlen(arr1),len2=0;
for(int i=0;i<len1;i++)
{
int flag=0;
if(len2==0)
{
arr2[0]=arr1[0];
len2++;
continue;
}
else
{
for(int j=0;j<len2;j++)
{
if(arr1[i]!=arr2[j])
{
flag=0;
continue;
}
else
{
flag=1;
break;
}
}
}
if(flag==0)
{
arr2[len2++]=arr1[i];
}
}
arr2[len2]='\0';
}
bool cmp(char a,char b)
{
return a<b;
}
int main()
{
char arr1[30],arr2[30];
cin>>arr1;
getdf(arr1,arr2);
int leng=strlen(arr2);
sort(arr2,arr2+leng,cmp);
for(int i=0;i<leng-2;i++)
for(int j=i+1;j<leng-1;j++)
for(int k=j+1;k<leng;k++)
{
cout<<arr2[i]<<arr2[j]<<arr2[k]<<endl;
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。