题目描述:
输入一个英文文章片段,
翻转指定区域的单词顺序,
标点符号和普通字母一样处理,
例如输入字符串
I am a developer.
[0,3]
则输出
developer. a am I
输入描述
使用换行隔开3个参数
第一个参数为文章内容 即英文字符串
第二个参数为翻转起始单词下标,下标从0开始
第三个参数为结束单词下标
输出描述
翻转后英文文章片段每个单词之间以一个半角空格分割输出
示例一
输入
I am a developer.
0
3
输出
developer. a am I
示例二
输入
hello world!
0
3
输出
world! hello
#include<string>
#include<iostream>
#include<vector>
using namespace std;
class Solution
{
public:
void Reverse(vector<string>&res,vector<string>& vs,int start,int end)
{
if (end >= vs.size())
{
end = vs.size()-1;
}
int count = start;
for (int i = end; i >= 0; --i)
{
if (i < start)
{
break;
}
res[count] = vs[i];
count++;
}
}
};
int main()
{
Solution s1;
vector<string>vs;
string str;
while (cin >> str)
{
vs.push_back(str);
if(getchar()=='\n')
{
break;
}
}
int start = 0, end = 0;
cin >> start;
cin >> end;
vector<string>res(vs.begin(), vs.end());
s1.Reverse(res,vs,start,end);
for (auto& x : res)
{
cout << x << " ";
}
return 0;
}
多测点测试用例
我想到的两种方法
一种是start和end交换
一种是开辟空间放入
我选的是第二种方法 这种方法可能在边界控制上比第一种要麻烦一些 我感觉。