前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode刷题】T96-仅仅反转字母

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

作者头像
木又AI帮
修改2019-07-18 10:28:09
4080
修改2019-07-18 10:28:09
举报
文章被收录于专栏:木又AI帮木又AI帮

【题目】

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

代码语言:javascript
复制
示例 :

输入:"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版本

代码语言:javascript
复制
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++版本

代码语言:javascript
复制
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;
    }
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档