牛客网 字符串变形

目录

题目描述

思路分析

AC代码

题目描述

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

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

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

数据范围: 1\le n \le 10^61≤n≤106 , 字符串中包括大写英文字母、小写英文字母、空格。

进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)

输入描述:

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

返回值描述:

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

思路分析

要看清楚题目说的是将单词的顺序颠倒。

我的思路比较大众化,为将单词的顺序颠倒,首先将整个字符串的字符顺序颠倒,然后,用空格作为字符串划分单词的判断点,将每一个由空格隔开的部分(即单词)再次颠倒。

为了方便,我尽可能地调用库函数。

AC代码

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
	string s;
	int n,i,j;
	getline(cin,s);
	cin>>n;
	for(auto& element:s){
		if(isupper(element))
		element+=32;
		else if(islower(element))
		element-=32;
	}
	reverse(s.begin(),s.end());
	for(i=0;i<n;i++){
		for(j=i;j<n;j++)
		if(s[j]==' ')
		break;
		reverse(s.begin()+i,s.begin()+j);
		i=j;
	}
	cout<<s;
}

猜你喜欢

转载自blog.csdn.net/weixin_62264287/article/details/125430453