Димитър обнови решението на 14.10.2013 21:27 (преди над 4 години)
+func pushEmptyCellsToTheEnd(pString []string) []string {
+ for i := 0; i < len(pString); i++ {
+ if pString[i] == "" {
+ for j := i; j < len(pString)-1; j++ {
+ temp := pString[j]
+ pString[j] = pString[j+1]
+ pString[j+1] = temp
+ }
+ }
+ }
+ return pString
+}
+func parsePath(inputString string) string {
+
+ var count int = strings.Count(inputString, "/")
+ cellsArray := strings.SplitN(inputString, "/", count+1)
+ for i := 0; i < len(cellsArray); i++ {
+ if cellsArray[i] == ".." || cellsArray[i] == "." {
+ tempCell := cellsArray[i]
+ cellsArray[i] = ""
+ if i-1 >= 0 && cellsArray[i-1] != ".." && tempCell == ".." {
+ cellsArray[i-1] = ""
+ cellsArray = pushEmptyCellsToTheEnd(cellsArray)
+ }
+ cellsArray = pushEmptyCellsToTheEnd(cellsArray)
+ i = -1
+ }
+ pushEmptyCellsToTheEnd(cellsArray)
+ }
+ cellCount := 0
+ for i := 0; i < len(cellsArray); i++ {
+ if cellsArray[i] != "" {
+ cellCount++
+ }
+ }
+ parsedString := strings.Join(cellsArray[0:cellCount], "/")
+ if parsedString == "" {
+ return "/" + parsedString
+ } else {
+ return "/" + parsedString + "/"
+ }
+}
Първо: Прочети указанията за предаване на домашни, пусни примерните тестове и виж какво се случва. Другият съвет, който мога да ти дам е да разгледаш документацията на strings. Има функции, които ще са по подходящи за нуждите ти от тези които си използвал и ще направят кода ти по-кратък и четим.
P.S. Не кръщавай неща с имена count, i, size и тн. не носят голям смисъл при четене.