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;
            }
相关文章
|
1月前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
56 12
|
7月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
539 0
|
5月前
|
C++ Python
探索Python与C/C++混合编程的艺术
探索Python与C/C++混合编程的艺术
116 1
|
5月前
|
存储
Leetcode第49题(字母异位词分组)
LeetCode第49题要求将字符串数组中的字母异位词分组,可以通过将每个字符串排序后作为键存入哈希表,最后将哈希表中的值添加到结果列表中来实现。
36 1
|
5月前
|
算法
Leetcode第十七题(电话号码的字母组合)
这篇文章介绍了如何使用深度优先搜索(DFS)算法来解决LeetCode第17题——电话号码的字母组合问题,通过递归方法生成所有可能的字母组合。
46 0
Leetcode第十七题(电话号码的字母组合)
|
5月前
|
索引
【LeetCode 11】242.有效的字母异位词
【LeetCode 11】242.有效的字母异位词
31 0
【LeetCode 11】242.有效的字母异位词
|
5月前
|
算法
【LeetCode 52】17.电话号码的字母组合
【LeetCode 52】17.电话号码的字母组合
59 0
|
5月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
WK
|
6月前
|
机器学习/深度学习 Java 程序员
为什么Python比C++慢很多?
Python相较于C++较慢主要体现在:动态类型系统导致运行时需解析类型,增加开销;作为解释型语言,逐行转换字节码的过程延长了执行时间;自动内存管理和垃圾回收机制虽简化操作但也带来了额外负担;全局解释器锁(GIL)限制了多线程性能;尽管Python库方便灵活,但在性能上往往不及C++底层库。然而,Python在某些领域如数据分析、机器学习中,凭借其高级别抽象和简洁语法仍表现出色。选语言需依据具体应用场景和需求综合考量。
WK
160 1
|
7月前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
195 0