942. DI String Match

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

Перестановка perm из n + 1 целых чисел всех целых чисел в диапазоне [0, n] может быть представлена в виде строки s длины n, где: s[i] == 'I', если perm[i] < perm[i + 1], и s[i] == 'D', если perm[i] > perm[i + 1]. Получив строку s, восстановите перестановку perm и return ее. Если существует несколько допустимых перестановок perm, return любую из них.

예제:

Input: s = "IDID"

Output: [0,4,1,3,2]

C# 해법

매칭됨/원본
public class Solution {
    public int[] DiStringMatch(string s) {
        int n = s.Length;
        int low = 0, high = n;
        int[] perm = new int[n + 1];
        
        for (int i = 0; i < n; i++) {
            if (s[i] == 'I') {
                perm[i] = low++;
            } else {
                perm[i] = high--;
            }
        }
        
        perm[n] = low;
        return perm;
    }
}

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 vector<int>& DiStringMatch(string s) {
        int n = s.size();
        int low = 0, high = n;
        vector<int>& perm = new int[n + 1];
        
        for (int i = 0; i < n; i++) {
            if (s[i] == 'I') {
                perm[i] = low++;
            } else {
                perm[i] = high--;
            }
        }
        
        perm[n] = low;
        return perm;
    }
}

Java 해법

매칭됨/원본
class Solution {
    public int[] diStringMatch(String s) {
        int n = s.length();
        int low = 0, high = n;
        int[] perm = new int[n + 1];
        
        for (int i = 0; i < n; i++) {
            if (s.charAt(i) == 'I') {
                perm[i] = low++;
            } else {
                perm[i] = high--;
            }
        }
        
        perm[n] = low;
        return perm;
    }
}

JavaScript 해법

매칭됨/원본
var diStringMatch = function(s) {
    const n = s.length;
    let low = 0, high = n;
    const perm = new Array(n + 1);
    
    for (let i = 0; i < n; i++) {
        if (s[i] === 'I') {
            perm[i] = low++;
        } else {
            perm[i] = high--;
        }
    }
    
    perm[n] = low;
    return perm;
};

Python 해법

매칭됨/원본
def diStringMatch(s):
    n = len(s)
    low, high = 0, n
    perm = [0] * (n + 1)
    
    for i in range(n):
        if s[i] == 'I':
            perm[i] = low
            low += 1
        else:
            perm[i] = high
            high -= 1
    
    perm[n] = low
    return perm

Go 해법

매칭됨/원본
package main

func diStringMatch(s string) []int {
    n := len(s)
    low, high := 0, n
    perm := make([]int, n+1)
    
    for i := 0; i < n; i++ {
        if s[i] == 'I' {
            perm[i] = low
            low++
        } else {
            perm[i] = high
            high--
        }
    }
    
    perm[n] = low
    return perm
}

Algorithm

Инициализировать два указателя low и high для отслеживания минимального и максимального числа, которые можно использовать в перестановке.

Создать 배열 perm длиной n + 1.

Пройти по строке s:

Если текущий символ равен 'I', добавить low в текущую позицию perm и увеличить low.

Если текущий символ равен 'D', добавить high в текущую позицию perm и уменьшить high.

Добавить оставшееся значение (low или high, так как они будут равны) в последнюю позицию perm.

Вернуть 배열 perm.

😎

Vacancies for this task

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

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