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;
            }
相关文章
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
68 6
|
5月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
137 2
|
3月前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
42 1
|
4月前
|
Python
6-18|Python画字母H
6-18|Python画字母H
|
5月前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
62 3
|
5月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
30 3
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
44 3
|
5月前
|
算法 Python
【Leetcode刷题Python】73. 矩阵置零
本文介绍了LeetCode第73题的解法,题目要求在给定矩阵中将所有值为0的元素所在的行和列全部置为0,并提供了一种原地算法的Python实现。
44 0
【Leetcode刷题Python】73. 矩阵置零
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
215 13
|
3月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
47 0