Решение на Нормализация на пътища от Михаил Стойков

Обратно към всички решения

Към профила на Михаил Стойков

Резултати

  • 10 точки от тестове
  • 1 бонус точка
  • 11 точки общо
  • 8 успешни тест(а)
  • 0 неуспешни тест(а)

Код

package main
import "strings"
func parsePath(path string) (result string) {
result = "/"
tokens := strings.Split(path, "/")
skip, index := 0, len(tokens)-1
for ; index >= 0; index-- {
token := tokens[index]
switch token {
case ".", "":
case "..":
skip++
default:
if skip != 0 {
skip--
} else {
result = "/" + token + result
}
}
}
return
}

Лог от изпълнението

PASS
ok  	_/tmp/d20131015-29033-lg498d	0.011s
PASS
ok  	_/tmp/d20131015-29033-lg498d	0.011s
PASS
ok  	_/tmp/d20131015-29033-lg498d	0.011s
PASS
ok  	_/tmp/d20131015-29033-lg498d	0.011s
PASS
ok  	_/tmp/d20131015-29033-lg498d	0.011s
PASS
ok  	_/tmp/d20131015-29033-lg498d	0.011s
PASS
ok  	_/tmp/d20131015-29033-lg498d	0.011s
PASS
ok  	_/tmp/d20131015-29033-lg498d	0.011s

История (2 версии и 3 коментара)

Михаил обнови решението на 12.10.2013 18:14 (преди над 4 години)

+package main
+
+import "regexp"
+
+func parsePath(path string) (result string) {
+ result = "/"
+ tokens := regexp.MustCompile("/").Split(path, -1)
+ skip, index := 0, len(tokens)-1
+ for ; index >= 0; index-- {
+ token := tokens[index]
+ switch token {
+ case ".", "":
+ case "..":
+ skip++
+ default:
+ if skip != 0 {
+ skip--
+ } else {
+ result = "/" + token + result
+ }
+ }
+ }
+ return
+}

Михаил обнови решението на 12.10.2013 18:18 (преди над 4 години)

package main
-import "regexp"
+import "strings"
func parsePath(path string) (result string) {
result = "/"
- tokens := regexp.MustCompile("/").Split(path, -1)
+ tokens := strings.Split(path, "/")
skip, index := 0, len(tokens)-1
for ; index >= 0; index-- {
token := tokens[index]
switch token {
case ".", "":
case "..":
skip++
default:
if skip != 0 {
skip--
} else {
result = "/" + token + result
}
}
}
return
}

кое точно в имплементацията не ти харесва ? На мен правенето на резултат не ме радва. Но не намерих, към онзи момент, StringBuilder във go и реших че ще го оставя за някой друг път.

И принципно мога и да не го сплитвам предварително, но нали не се борим за някаква невероятна скорост на изпълнение?