数据结构OJ--字符串变形

数据结构OJ--字符串变形,第1张

对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: 1≤n≤10^6 , 字符串中包括大写英文字母、小写英文字母、空格。进阶:空间复杂度 O(n) , 时间复杂度 O(n)

输入:

给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)

输出:

请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。

输入样例 1

This is a sample
16

输出样例 1

SAMPLE A IS tHIS

解题思路:(1)难实现思路(字符串的 *** 作):首先输入一串字符串并用字符数组存储,并对数组中的空格进行标记。然后再将其倒置存储,即将”hello world“转为”DLLOW OLLEH“,然后遍历该数组,遇到空格则再进行倒置,即为”WOLLD HELLO",程序写出来了,但是死活过不了oj。

(2)简单栈 *** 作(思路来源于美丽的总裁):再永真循环(循环结束条件为读取到回车)中,将空格作为分界符,当a[i]读取到空格时即退出输入,并将a[i]中的元素从尾至头入栈并改变大小写,然后将a[i]初始化,当a[i]读取到回车时,退出永真循环,并将栈中元素出栈并输出,不得不说,总裁真是太聪明了!

#include
#define maxsize 10000
using namespace std;
typedef struct{
	char *base;
	char *top;
	int stacksize;
}Sqstack;
void CreatSqstack(Sqstack &S){
	S.base=new char[maxsize];
	S.top=S.base; 
	S.stacksize=maxsize;

}

void push(Sqstack &S,char *a,int n){
	int i;
	for(i=n-1;i>=0;i--){
		if(a[i]>='a'&&a[i]<='z')
			*S.top++=a[i]-32;
		else if(a[i]>='A'&&a[i]<='Z')
			*S.top++=a[i]+32;
	}
	*S.top++=' ';
}
void pop(Sqstack &S){
	S.top--;
	while(S.base!=S.top)
		cout<<*--S.top;
}

int main(){
	Sqstack S;
	char a[30];
	int i=0,flag=0,n;
	CreatSqstack(S);
	while(1){
		i=0;
		a[i]=getchar();
		while(a[i]!=' '){
			if(a[i]=='\n'){
				flag=1;
				break;
			}
			i+=1;
			a[i]=getchar();
		}
		a[i]=' ';
		push(S,a,i);
		if(flag) break;	
	}
	cin>>n;
	pop(S);	
	delete S.base;
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1294728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存