917. Reverse Only Letters

LeetCode easy original: C# #array #csharp #easy #leetcode #string
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

Задав строку s, переreturn ее в соответствии со следующими правилами: все символы, не являющиеся английскими буквами, остаются в той же позиции. Все английские буквы (строчные или прописные) должны быть перевернуты. return s после перевертывания.

예제:

Input: s = "ab-cd"

Output: "dc-ba"

C# 해법

매칭됨/원본
using System;
using System.Text;
public class Solution {
    public string ReverseOnlyLetters(string s) {
        var letters = new List<char>();
        foreach (char c in s) {
            if (char.IsLetter(c)) {
                letters.Add(c);
            }
        }
        letters.Reverse();
        var result = new StringBuilder();
        int idx = 0;
        foreach (char c in s) {
            if (char.IsLetter(c)) {
                result.Append(letters[idx++]);
            } else {
                result.Append(c);
            }
        }
        return result.ToString();
    }
}

C++ 해법

자동 초안, 제출 전 검토
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public string ReverseOnlyLetters(string s) {
        var letters = new List<char>();
        foreach (char c in s) {
            if (char.IsLetter(c)) {
                letters.push_back(c);
            }
        }
        letters.Reverse();
        var result = new StringBuilder();
        int idx = 0;
        foreach (char c in s) {
            if (char.IsLetter(c)) {
                result.Append(letters[idx++]);
            } else {
                result.Append(c);
            }
        }
        return result.ToString();
    }
}

Java 해법

자동 초안, 제출 전 검토
import java.util.*;
import java.math.*;

// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
    public String ReverseOnlyLetters(String s) {
        var letters = new List<char>();
        foreach (char c in s) {
            if (char.IsLetter(c)) {
                letters.add(c);
            }
        }
        letters.Reverse();
        var result = new StringBuilder();
        int idx = 0;
        foreach (char c in s) {
            if (char.IsLetter(c)) {
                result.Append(letters[idx++]);
            } else {
                result.Append(c);
            }
        }
        return result.ToString();
    }
}

JavaScript 해법

매칭됨/원본
var reverseOnlyLetters = function(s) {
    const letters = s.split('').filter(c => /[a-zA-Z]/.test(c));
    letters.reverse();
    let idx = 0;
    return s.split('').map(c => {
        if (/[a-zA-Z]/.test(c)) {
            return letters[idx++];
        } else {
            return c;
        }
    }).join('');
};

Go 해법

매칭됨/원본
package main

func reverseOnlyLetters(s string) string {
    letters := []rune{}
    for _, c := range s {
        if isLetter(c) {
            letters = append(letters, c)
        }
    }
    reverseRunes(letters)
    result := []rune{}
    idx := 0
    for _, c := range s {
        if isLetter(c) {
            result = append(result, letters[idx])
            idx++
        } else {
            result = append(result, c)
        }
    }
    return string(result)
}

func isLetter(c rune) bool {
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
}

func reverseRunes(runes []rune) {
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
}

Algorithm

Создать 배열 для хранения только английских букв из строки s.

Перевернуть 배열 с английскими буквами.

Пройти по строке s и заменить каждую английскую букву на соответствующую из перевернутого 배열а.

Вернуть результат.

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.