1087. Brace Expansion

Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

Дан список оценок различных студентов, items, где items[i] = [IDi, scorei] представляет собой одну оценку студента с идентификатором IDi. Вычислите среднее значение пяти лучших оценок каждого студента.

return ответ в виде mảngа пар result, где result[j] = [IDj, topFiveAveragej] представляет студента с идентификатором IDj и его среднее значение пяти лучших оценок. Отсортируйте result по IDj в порядке возрастания.

Среднее значение пяти лучших оценок студента вычисляется путем сложения его пяти лучших оценок и деления на 5 с использованием целочисленного деления.

Ví dụ:

Input: s = "{a,b}c{d,e}f"

Output: ["acdf","acef","bcdf","bcef"]

C# lời giải

đã khớp/gốc
public class Solution {
    private int StoreFirstOptions(string s, int startPos, List<char> firstOptions) {
        if (s[startPos] != '{') {
            firstOptions.Add(s[startPos]);
        } else {
            startPos++;
            while (s[startPos] != '}') {
                if (char.IsLower(s[startPos])) {
                    firstOptions.Add(s[startPos]);
                }
                startPos++;
            }
            firstOptions.Sort();
        }
        return startPos + 1;
    }
    private List<string> FindAllWords(string s, int startPos) {
        if (startPos == s.Length) {
            return new List<string> { "" };
        }
        List<char> firstOptions = new List<char>();
        int remStringStartPos = StoreFirstOptions(s, startPos, firstOptions);
        List<string> wordsWithRemString = FindAllWords(s, remStringStartPos);
        List<string> expandedWords = new List<string>();
        foreach (char c in firstOptions) {
            foreach (string word in wordsWithRemString) {
                expandedWords.Add(c + word);
            }
        }
        return expandedWords;
    }
    public List<string> Expand(string s) {
        return FindAllWords(s, 0);
    }
}

C++ lời giải

bản nháp tự động, xem lại trước khi gửi
#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:
    private int StoreFirstOptions(string s, int startPos, List<char> firstOptions) {
        if (s[startPos] != '{') {
            firstOptions.push_back(s[startPos]);
        } else {
            startPos++;
            while (s[startPos] != '}') {
                if (char.IsLower(s[startPos])) {
                    firstOptions.push_back(s[startPos]);
                }
                startPos++;
            }
            firstOptions.Sort();
        }
        return startPos + 1;
    }
    private List<string> FindAllWords(string s, int startPos) {
        if (startPos == s.size()) {
            return new List<string> { "" };
        }
        List<char> firstOptions = new List<char>();
        int remStringStartPos = StoreFirstOptions(s, startPos, firstOptions);
        List<string> wordsWithRemString = FindAllWords(s, remStringStartPos);
        List<string> expandedWords = new List<string>();
        foreach (char c in firstOptions) {
            foreach (string word in wordsWithRemString) {
                expandedWords.push_back(c + word);
            }
        }
        return expandedWords;
    }
    public List<string> Expand(string s) {
        return FindAllWords(s, 0);
    }
}

Java lời giải

đã khớp/gốc
class Solution {
    private int storeFirstOptions(String s, int startPos, List<Character> firstOptions) {
        if (s.charAt(startPos) != '{') {
            firstOptions.add(s.charAt(startPos));
        } else {
            startPos++;
            while (s.charAt(startPos) != '}') {
                if (Character.isLowerCase(s.charAt(startPos))) {
                    firstOptions.add(s.charAt(startPos));
                }
                startPos++;
            }
            Collections.sort(firstOptions);
        }
        return startPos + 1;
    }

    private List<String> findAllWords(String s, int startPos) {
        if (startPos == s.length()) {
            return Arrays.asList("");
        }
        
        List<Character> firstOptions = new ArrayList<>();
        int remStringStartPos = storeFirstOptions(s, startPos, firstOptions);
        List<String> wordsWithRemString = findAllWords(s, remStringStartPos);
        
        List<String> expandedWords = new ArrayList<>();
        for (char c : firstOptions) {
            for (String word : wordsWithRemString) {
                expandedWords.add(c + word);
            }
        }
        return expandedWords;
    }

    public List<String> expand(String s) {
        return findAllWords(s, 0);
    }
}

JavaScript lời giải

đã khớp/gốc
class Solution {
    storeFirstOptions(s, startPos, firstOptions) {
        if (s[startPos] !== '{') {
            firstOptions.push(s[startPos]);
        } else {
            startPos++;
            while (s[startPos] !== '}') {
                if (s[startPos] >= 'a' && s[startPos] <= 'z') {
                    firstOptions.push(s[startPos]);
                }
                startPos++;
            }
            firstOptions.sort();
        }
        return startPos + 1;
    }

    findAllWords(s, startPos) {
        if (startPos === s.length) {
            return [""];
        }

        const firstOptions = [];
        const remStringStartPos = this.storeFirstOptions(s, startPos, firstOptions);
        const wordsWithRemString = this.findAllWords(s, remStringStartPos);

        const expandedWords = [];
        for (const c of firstOptions) {
            for (const word of wordsWithRemString) {
                expandedWords.push(c + word);
            }
        }
        return expandedWords;
    }

    expand(s) {
        return this.findAllWords(s, 0);
    }
}

Python lời giải

đã khớp/gốc
class Solution:
    def storeFirstOptions(self, s: str, startPos: int, firstOptions: List[str]) -> int:
        if s[startPos] != '{':
            firstOptions.append(s[startPos])
        else:
            startPos += 1
            while s[startPos] != '}':
                if s[startPos].islower():
                    firstOptions.append(s[startPos])
                startPos += 1
            firstOptions.sort()
        return startPos + 1

    def findAllWords(self, s: str, startPos: int) -> List[str]:
        if startPos == len(s):
            return [""]
        
        firstOptions = []
        remStringStartPos = self.storeFirstOptions(s, startPos, firstOptions)
        wordsWithRemString = self.findAllWords(s, remStringStartPos)
        
        expandedWords = []
        for c in firstOptions:
            for word in wordsWithRemString:
                expandedWords.append(c + word)
        return expandedWords

    def expand(self, s: str) -> List[str]:
        return self.findAllWords(s, 0)

Algorithm

Вызовите функцию findAllWords(String, Integer) с данной строкой s и значением startPos равным 0. startPos представляет текущую позицию в строке s. Если chuỗi, которую нужно рассмотреть, пуста (startPos == s.length()), return список, содержащий пустую строку.

Вызовите функцию storeFirstOptions с строкой s, целым numberм startPos и пустым списком firstOptions. find набор символов, начиная с позиции startPos, и сохраните их в списке firstOptions. Это может быть один символ или все символы между скобками. Отсортируйте список firstOptions. return обновленное значение startPos, которое теперь указывает на первый индекс следующей группы символов в строке s, которую мы будем рассматривать. Сохраните это значение в переменной remStringStartPos. Сделайте рекурсивный вызов функции findAllWords(String, Integer) с строкой s и remStringStartPos. Сохраните возвращенный список слов в переменной wordsWithRemString.

Переберите слова в wordsWithRemString и добавьте вышеуказанный символ в начало каждого слова, сохраняя новую строку в списке expandedWords. return список expandedWords.

😎

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.