LeetCode每日一题题解:917. 仅仅反转字母-双指针-python和C++

简介: LeetCode每日一题题解:917. 仅仅反转字母-双指针-python和C++

917. 仅仅反转字母


难度简单112收藏分享切换为英文接收动态反馈


给你一个字符串 s ,根据下述规则反转字符串:


所有非英文字母保留在原有位置。

所有英文字母(小写或大写)位置反转。

返回反转后的 s 。


示例 1:


输入:s = "ab-cd"

输出:"dc-ba"

示例 2:


输入:s = "a-bC-dEf-ghIj"

输出:"j-Ih-gfE-dCba"

示例 3:


输入:s = "Test1ng-Leet=code-Q!"

输出:"Qedo1ct-eeLg=ntse-T!"

提示


1 <= s.length <= 100

s 仅由 ASCII 值在范围 [33, 122] 的字符组成

s 不含 '\"' 或 '\\'

解题思路:


双指针,左右一起开始,如果都是字母直接相互换位置,否则继续左指针右移,右指针左移

python的.isalpha()函数用来判断改字符是不是字母,是字符返回True,否则返回False


下面附上python和C++的代码

python代码:

class Solution:
    def reverseOnlyLetters(self, s: str) -> str:
        ans = list(s)# 将字符串转换为列表便于操作
        l , r = 0 , len(s)-1   #双指针
        while l < len(s) - 1:  #开始遍历字符串
            while l < r and not s[l].isalpha():  #如果不是字母,则左指针向右移
                    l += 1                       
            while l < r and not s[r].isalpha():  #如果不是字符,则右指针向左移
                    r -= 1
            if l >= r:     #如果左指针大于等于右指针,则跳出循环
                break
            ans[l] , ans[r] = ans[r] , ans[l]  #左右指针的值交换
            l += 1  #左指针加一
            r -= 1   #有指针减一
        return ''.join(ans)  #将列表转换为字符串输出结果


C++代码:


class Solution {
public:
    string reverseOnlyLetters(string s) {
        int n = s.size(); //求出s数组的长度
        int l = 0 , r = n-1;   // 定义双指针
        while (l < (n-1)) {   //开始构造循环
            while (l < r && !isalpha(s[l])) {  
                l++;
            }
            while (l < r && !isalpha(s[r])) {
                r--;
            }
            if (l >= r) {
               break;
            }
相关文章
|
6天前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
|
6天前
|
索引
LeetCode438题(无敌双指针——滑动窗口)
LeetCode438题(无敌双指针——滑动窗口)
|
6天前
|
存储 C++ Python
LabVIEW使用Python MathWorks® MATLAB®软件和C/C++
LabVIEW使用Python MathWorks® MATLAB®软件和C/C++
|
6天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
6天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
6天前
|
C++ Python
【C++/Python】C++调用python文件
【C++/Python】C++调用python文件
|
6天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
9 0
|
6天前
|
算法 索引
【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串
经过这两道题目的书写,相信大家一定深刻认识到了滑动窗口的使用方法!!! 下面请大家继续刷题吧!!!
13 0
|
6天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
25 4
【刷题】 leetcode 面试题 08.05.递归乘法