【leetcode刷题】T96-仅仅反转字母

时间:2022-06-26
本文章向大家介绍【leetcode刷题】T96-仅仅反转字母,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

【题目】

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

示例 :

输入:"ab-cd"
输出:"dc-ba"
示例 :

输入:"a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"
示例 :

输入:"Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"

提示:

S.length <= 100 33 <= S[i].ASCIIcode <= 122 S 中不包含 or "

【思路】

使用两指针i和j,分别从字符串两端开始遍历,当S[i]和S[j]都是字母时,交换。

【代码】

python版本

class Solution(object):
    def reverseOnlyLetters(self, S):
        """
        :type S: str
        :rtype: str
        """
        i = 
        j = len(S) - 
        while i < j:
            # 保证S[i]和S[j]都是字符
            if 'a' <= S[i] <= 'z' or 'A' <= S[i] <= 'Z':
                pass
            else:
                i += 
                continue
            if 'a' <= S[j] <= 'z' or 'A' <= S[j] <= 'Z':
                pass
            else:
                j -= 
                continue
            S = S[:i] + S[j] + S[i+:j] + S[i] + S[j+:]
            i += 
            j -= 
        return S

C++版本

class Solution {
public:
    string reverseOnlyLetters(string S) {
        int i = ;
        int j = S.size() - ;
        while(i < j){
            if((S[i] < 'a' || S[i] > 'z') && (S[i] < 'A' || S[i] > 'Z')){
                i++;
                continue;
            }
            if((S[j] < 'a' || S[j] > 'z') && (S[j] < 'A' || S[j] > 'Z')){
                j--;
                continue;
            }
            char tmp = S[i];
            S[i] = S[j];
            S[j] = tmp;
            i++;
            j--;
        }
        return S;
    }
};