【Leetcode】仅仅反转字母

正文索引 [隐藏]

题目描述:

给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。

输入样例1:

ab-cd

输出样例1:

dc-ba

输入样例2:

a-bC-dEf-ghIj

输出样例2:

j-Ih-gfE-dCba

输入样例3:

Test1ng-Leet=code-Q!

输出样例3:

Qedo1ct-eeLg=ntse-T!

解题思路:

我是用stack+俩趟for循环才搞定的,第一次for循环把所有的字母推入栈中,第二次for循环把所有出现字母的位置用栈顶元素来代替。

AC代码:

#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;
}