0
点赞
收藏
分享

微信扫一扫

力扣每日一题2022-02-23简单题:仅仅反转字母

小美人鱼失去的腿 2022-02-23 阅读 37
leetcode

仅仅反转字母


题目描述

仅仅反转字母


思路

双指针

left和right指针分别从左往右和从右往左遍历,如果都扫描到字母且left<right,则交换s[left]和s[right],继续遍历;否则反转结束,返回字符串。

Java实现

class Solution {
    public String reverseOnlyLetters(String s) {
        int n = s.length();
        char[] arr = s.toCharArray();
        int left = 0, right = n-1;
        while (true) {
            while (left < right && !Character.isLetter(s.charAt(left))) {
                left ++;
            }
            while (left < right && !Character.isLetter(s.charAt(right))) {
                right --;
            }
            if (left >= right) {
                break;
            }
            swap(arr, left, right);
            left ++;
            right --;
        }
        return new String(arr);
    }
    private void swap(char[] arr, int left, int right) {
        char temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
    }
}

Python实现

class Solution:
    def reverseOnlyLetters(self, s: str) -> str:
        ans = list(s)
        n = len(ans)
        left, right = 0, n-1
        while True:
            while left < right and not ans[left].isalpha():
                left += 1
            while left < right and not ans[right].isalpha():
                right -= 1
            if left >= right:
                break
            ans[left], ans[right] = ans[right], ans[left]
            left += 1
            right -= 1
        return ''.join(ans)
举报

相关推荐

0 条评论