Дан абсолютный путь в стиле Unix (начинается с /). Приведите его к каноническому виду:
. — текущий каталог, его выбрасываем;
.. — подняться на уровень вверх; выше корня подняться нельзя, /.. — это /;
- несколько слешей подряд
// равносильны одному;
- любое другое имя, включая
... и .hidden, — обычный каталог.
Канонический путь начинается с одного /, имена разделены одним /, в конце слеша нет
(кроме самого корня /).
// SimplifyPath возвращает канонический вид абсолютного пути path.
func SimplifyPath(path string) string
Примеры
"/home/" → "/home"
"/home//foo/" → "/home/foo"
"/home/user/Documents/../Pictures" → "/home/user/Pictures"
"/../" → "/"
"/.../a/../b/c/../d/./" → "/.../b/d"
Ограничения
1 ≤ len(path) ≤ 10⁶, path[0] == '/'; символы — латиница, цифры, ., _, /.
- Пакеты
path и path/filepath не использовать — пишем сами.
- Ожидается O(n).
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.