go_["a","a","b","b","c","c","c"]非數字陣列json.Unmarshal()方法不支援
阿新 • • 發佈:2021-08-23
443. 壓縮字串
// js JSON.parse()方法 JSON.stringify()方法 // java int[][] ghosts = JSON.parseObject(cin.nextLine(), int[][].class); // go if errJson2 := json.Unmarshal([]byte(targetInput), &target); errJson2 != nil { println("errJson2:", errJson2) return } // python json.loads()方法 json.json()方法
給你一個字元陣列 chars ,請使用下述演算法壓縮:
從一個空字串 s 開始。對於 chars 中的每組 連續重複字元 :
如果這一組長度為 1 ,則將字元追加到 s 中。
否則,需要向 s 追加字元,後跟這一組的長度。
壓縮後得到的字串 s 不應該直接返回 ,需要轉儲到字元陣列 chars 中。需要注意的是,如果組長度為 10 或 10 以上,則在 chars 陣列中會被拆分為多個字元。
請在 修改完輸入陣列後 ,返回該陣列的新長度。
你必須設計並實現一個只使用常量額外空間的演算法來解決此問題。
示例 1:
輸入:chars = ["a","a","b","b","c","c","c"]
輸出:返回 6 ,輸入陣列的前 6 個字元應該是:["a","2","b","2","c","3"]
解釋:
"aa" 被 "a2" 替代。"bb" 被 "b2" 替代。"ccc" 被 "c3" 替代。
示例 2:
輸入:chars = ["a"]
輸出:返回 1 ,輸入陣列的前 1 個字元應該是:["a"]
解釋:
沒有任何字串被替代。
示例 3:
輸入:chars = ["a","b","b","b","b","b","b","b","b","b","b","b","b"]
輸出:返回 4 ,輸入陣列的前 4 個字元應該是:["a","b","1","2"]。
解釋:
由於字元 "a" 不重複,所以不會被壓縮。"bbbbbbbbbbbb" 被 “b12” 替代。
注意每個數字在陣列中都有它自己的位置。
package main import ( "encoding/json" "fmt" ) func compress(chars []View Codebyte) int { write, left := 0, 0 for read, ch := range chars { if read == len(chars)-1 || ch != chars[read+1] { chars[write] = ch write++ num := read - left + 1 if num > 1 { anchor := write for ; num > 0; num /= 10 { chars[write] = '0' + byte(num%10) write++ } s := chars[anchor:write] for i, n := 0, len(s); i < n/2; i++ { s[i], s[n-1-i] = s[n-1-i], s[i] } } left = read + 1 } } return write } func main() { var charsInput string if _, err := fmt.Scanf("%s\n", &charsInput); err != nil { println("err:", err) return } var chars []byte if errJson2 := json.Unmarshal([]byte(charsInput), &chars); errJson2 != nil { println("errJson2:", errJson2) return } println(compress(chars)) }