LeetCode:917. Reverse Only Letters(仅仅反转字符)

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。

这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. LeetCode:55. Jump Game(跳远比赛)
  2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
  3. LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

题目描述:

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

示例 1:

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

示例 2:

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

示例 3:

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

来源:力扣(LeetCode)


java实现方式1:

   /**
     * 仅仅反转字符
     *
     * @param S 字符串
     * @return 字符串
     */
    private String reverseOnlyLetters1(String S) {
        if (S.length() <= 1) {
            return S;
        }
        char[] chs = S.toCharArray();
        int i = 0;
        int j = chs.length - 1;
        while (i < j) {
            if (Character.isLetter(chs[i]) && Character.isLetter(chs[j])) {
                swap(chs, i++, j--);
            } else if (Character.isLetter(chs[i])) {
                j--;
            } else if (Character.isLetter(chs[j])) {
                i++;
            } else {
                i++;
                j--;
            }
        }
        return String.valueOf(chs);
    }

    /**
     * 交换字符
     *
     * @param chs 字符串数组
     * @param i   位置i
     * @param j   位置j
     */
    private void swap(char[] chs, int i, int j) {
        char temp = chs[i];
        chs[i] = chs[j];
        chs[j] = temp;
    }

时间复杂度:O(n)

空间复杂度:O(1)


python实现方法1:

def reverse_only_letters(chs: str) -> str:
    '''
        反转字符串
    Args:
        chs: 字符串数组
    Returns:
        反转后字符串
    '''
    if len(chs) < 2:
        return chs
    arrs = list(chs)
    i = 0
    j = len(chs) - 1
    while i < j:
        if str(arrs[i]).isalpha() and str(arrs[j]).isalpha():
            swap(arrs, i, j)
            i += 1
            j -= 1
        elif str(arrs[i]).isalpha():
            j -= 1
        elif str(arrs[j]).isalpha():
            i += 1
        else:
            i += 1
            j -= 1
    return ''.join(arrs)

def swap(chs: List[str], i: int, j: int)->None:
    '''
        交换数组位置
    Args:
        chs: 数组
        i: 位置i
        j: 位置j
    Returns:
        交换位置后的数组
    '''
    temp = chs[i]
    chs[i] = chs[j]
    chs[j] = temp

时间复杂度:O(n)

空间复杂度:O(1)


源码地址:

https://github.com/zhangyu345293721/leetcode

你可能感兴趣的:(LeetCode)