Условие
The builder pattern constructs a complex object step by step and produces the final result at the end, so callers can set the parts in any order.
Each part is a keyword, a space, and its text:
select <columns>: comma-separated column names (spaces around commas may vary). Optional; the default is*.from <table>: required.where <condition>,order <columns>,limit <n>: optional.
If a keyword appears more than once, the last one wins. Build the query in this fixed order, with single spaces:
SELECT <columns> FROM <table>[ WHERE <condition>][ ORDER BY <columns>][ LIMIT <n>]
In the SELECT list, trim each column and join them with , . All other texts are copied unchanged.
Implement query_builder(parts).
Input
parts: The parts, in any order.
Output
Return the SQL query string.
Ограничения
1 ≤ number of parts ≤ 20
At least one from part; each part has at most 100 characters
Примеры
Ввод:
parts = ["where age \u003e 18", "from users", "select name,age"]
Ожидаемый вывод:
expected = "SELECT name, age FROM users WHERE age \u003e 18"
Ввод:
std::vector<std::string> parts = {"where age \u003e 18", "from users", "select name,age"};
Ожидаемый вывод:
std::string expected = "SELECT name, age FROM users WHERE age \u003e 18";
Ввод:
string[] parts = new string[] {"where age \u003e 18", "from users", "select name,age"};
Ожидаемый вывод:
string expected = "SELECT name, age FROM users WHERE age \u003e 18";
Пояснение
The parts arrive out of order, but the query is always built as SELECT … FROM … WHERE …: "SELECT name, age FROM users WHERE age > 18".
Ввод:
parts = ["from orders", "limit 10", "order total DESC"]
Ожидаемый вывод:
expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10"
Ввод:
std::vector<std::string> parts = {"from orders", "limit 10", "order total DESC"};
Ожидаемый вывод:
std::string expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10";
Ввод:
string[] parts = new string[] {"from orders", "limit 10", "order total DESC"};
Ожидаемый вывод:
string expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10";
Пояснение
Without a select part the columns default to *: "SELECT * FROM orders ORDER BY total DESC LIMIT 10".
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Store each part by its keyword first; build the text only at the end.
Подсказка 2
A later part with the same keyword replaces the earlier one.
Подсказка 3
Trim each column in the SELECT list and use * when there is no select part.
Ожидаемая сложность
O(total length) time, O(total length) extra space
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.