取不重复的子串。

取不重复的子串。

时间: 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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注