LeetCode 917. 仅仅反转字母 Reverse Onl

作者: 1江春水 | 来源:发表于2019-08-12 11:12 被阅读4次

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

【示例1】

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

【示例2】

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

【示例3】

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

【思路】
1、使用双指针 left right
2、如果字符在 a-z A-Z之间,那么交换字符
3、如果s[left]不在字母区间,left++向后移位
4、如果s[right]不在字母区间,right--向前移位
5、时间复杂度O(n)
6、空间复杂度O(n)

Swift代码实现:

func reverseOnlyLetters(_ S: String) -> String {
    var chaArr = Array.init(S)
    var left = 0
    var right = chaArr.count-1
    while left < right {
        let cL = chaArr[left]
        let cR = chaArr[right]
        var valueL = uint.init()
        var valueR = uint.init()
        for c in cL.unicodeScalars {
            valueL = c.value
        }
        for cc in cR.unicodeScalars {
            valueR = cc.value
        }
        if !((valueL >= 65 && valueL <= 90) || (valueL >= 97 && valueL <= 122)) {
            left+=1
            continue
        }

        if !((valueR >= 65 && valueR <= 90) || (valueR >= 97 && valueR <= 122)) {
            right-=1
            continue
        }
        //交换
        let tmp = chaArr[left]
        chaArr[left] = chaArr[right]
        chaArr[right] = tmp
        left+=1
        right-=1
    }
    return String.init(chaArr)
}

C语言实现:

char * reverseOnlyLetters(char * S){
    int left = 0;
    int right = strlen(S)-1;
    while (left < right) {
        bool l = (S[left] >= 'a' && S[left] <= 'z') || (S[left] >= 'A' && S[left] <= 'Z');
        bool r = (S[right] >= 'a' && S[right] <= 'z') || (S[right] >= 'A' && S[right] <= 'Z');
        if (l && r) {
            char tmp = S[left];
            S[left] = S[right];
            S[right] = tmp;
            left++;
            right--;
            continue;
        }
        if (!l) {
            left++;
        }
        if (!r) {
            right--;
        }
    }
    return S;
}

相关文章

  • LeetCode 917. 仅仅反转字母 Reverse Onl

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

  • Leetcode 917. 仅仅反转字母

    917. 仅仅反转字母 URL 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而...

  • 917. 仅仅反转字母

    917. 仅仅反转字母 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母...

  • 917. 仅仅反转字母

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

  • 917. 仅仅反转字母

    给你一个字符串 s ,根据下述规则反转字符串: 所有非英文字母保留在原有位置。 所有英文字母(小写或大写)位置反转...

  • LeetCode第105场周赛题解

    917. 仅仅反转字母 题目难度Easy 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留...

  • LeetCode | 0345. Reverse Vowels

    LeetCode 0345. Reverse Vowels of a String反转字符串中的元音字母【Easy...

  • Leetcode PHP题解--D63 917. Reverse

    D63 917. Reverse Only Letters 题目链接 917. Reverse Only Lett...

  • Python Day3

    字符串反转 leetcode 34 Reverse String

  • 2022-02-23 917. 仅仅反转字母

    送分题java版本: Go版本:

网友评论

    本文标题:LeetCode 917. 仅仅反转字母 Reverse Onl

    本文链接:https://www.haomeiwen.com/subject/ahvyjctx.html