版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/102107668
给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
ab-cd
dc-ba
a-bC-dEf-ghIj
j-Ih-gfE-dCba
Test1ng-Leet=code-Q!
Qedo1ct-eeLg=ntse-T!
我是用stack+俩趟for循环才搞定的,第一次for循环把所有的字母推入栈中,第二次for循环把所有出现字母的位置用栈顶元素来代替。
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string reverseOnlyLetters(string S) {
stack<char> s;
for(int i = 0; i < S.length(); i++)
{
if(isalpha(S[i]))
{
s.push(S[i]);
}
}
string ans;
for(int i = 0; i < S.length(); i++)
{
if(isalpha(S[i]))
{
ans += s.top();
s.pop();
}
else ans += S[i];
}
return ans;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
string str;
getline(cin,str);
Solution s;
cout << s.reverseOnlyLetters(str) << endl;
return 0;
}