在字符串中查找第一次出现的字符(栈和队列)

在字符串中查找第一次出现的字符(栈和队列)

时间: 1ms        内存:1000M

描述:

题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。

输入:

输入:

abaccdeff

输出:

输出:

b

示例输入:

believable

示例输出:

i

提示:

参考答案(内存最优[748]):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct{
	char *base;
	char *top;
	int stacksize;
}Stack;
void Initstack(Stack *S){
	S->base=malloc(sizeof(char)*MAXSIZE);
	S->top=S->base;
	S->stacksize=MAXSIZE;
}
void Push(Stack *S,char e){
	*S->top++=e;
}
int main()
{
	char p,*q,*t;
	Stack s;
	Initstack(&s);
	while((p=getchar())!=EOF){
		Push(&s,p);
	}
	for(q=s.base;q<s.top-1;q++){
		for(t=q+1;t<s.top;t++)
			if(*q==*t)
				break;
		if(t==s.top)
			break;
	}
	printf("%c",*q);
	return 0;
}

参考答案(时间最优[0]):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct{
	char *base;
	char *top;
	int stacksize;
}Stack;
void Initstack(Stack *S){
	S->base=malloc(sizeof(char)*MAXSIZE);
	S->top=S->base;
	S->stacksize=MAXSIZE;
}
void Push(Stack *S,char e){
	*S->top++=e;
}
int main()
{
	char p,*q,*t;
	Stack s;
	Initstack(&s);
	while((p=getchar())!=EOF){
		Push(&s,p);
	}
	for(q=s.base;q<s.top-1;q++){
		for(t=q+1;t<s.top;t++)
			if(*q==*t)
				break;
		if(t==s.top)
			break;
	}
	printf("%c",*q);
	return 0;
}

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

点赞

发表评论

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