1. 程式人生 > 其它 >go_["a","a","b","b","c","c","c"]非數字陣列json.Unmarshal()方法不支援

go_["a","a","b","b","c","c","c"]非數字陣列json.Unmarshal()方法不支援

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 []
byte) 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)) }
View Code