본문 바로가기

Algorithm/String

(C++, Rust) - LeetCode (easy) 917. Reverse Only Letters

반응형

https://leetcode.com/problems/reverse-only-letters/description/

 

Reverse Only Letters - LeetCode

Can you solve this real interview question? Reverse Only Letters - Given a string s, reverse the string according to the following rules: * All the characters that are not English letters remain in the same position. * All the English letters (lowercase or

leetcode.com

문자열을 다루는 문제였습니다.

📕 풀이방법

📔 풀이과정

s의 alphabet이 아닌 문자열은 그대로 두면서 alphabet인 문자만 뒤집어 저장 후 반환하면 됩니다. iterator와 filter지원되는 rust의 경우 가독성 있게 구현 가능합니다.


📕 Code

📔 C++

class Solution {
public:
    string reverseOnlyLetters(string s) {
        int j = s.size() - 1;
        string ans = s;

        for (int i = 0; i < s.size(); i++) {
            if (isalpha(s[i])) {
                while (!isalpha(s[j])) j--;
                ans[i] = s[j--];
            }
        }

        return ans;
    }
};

📔 언어 2

impl Solution {
    pub fn reverse_only_letters(s: String) -> String {
        let mut alphas: Vec<char> = s.chars().filter(|&c| c.is_ascii_alphabetic()).collect();
        let mut iter = alphas.into_iter().rev();

        s.chars().map(|c| {
            if !c.is_ascii_alphabetic() {
                c
            } else {
                iter.next().unwrap()
            }
        }).collect()
    }
}

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.