3
我研究這個問題的代碼:的Java遞歸:如何通過一個String
給定一個字典,編寫一個函數來壓平。
考慮下面的輸入/輸出方案爲更好地理解:
Input:
{
'Key1': '1',
'Key2': {
'a' : '2',
'b' : '3',
'c' : {
'd' : '3',
'e' : '1'
}
}
}
Output:
{
'Key1': '1',
'Key2.a': '2',
'Key2.b' : '3',
'Key2.c.d' : '3',
'Key2.c.e' : '1'
}
接受的解決方案是低於(請注意,這僅僅是僞代碼)。
我要實現它在Java中
function flattenDictionary(String initialKey, dictionary, flatDictionary){
for (key : dictionary.keyset()){
value = dictionary.get(key)
if (!isHashMapInstance(value)){
if (initialKey == null || initialKey == "")
flatDictionary.put(key, value)
else
flatDictionary.put(initialKey + "." + key, value)
}
else {
if (initialKey == null || initialKey == "")
flattenDictionary(key, value, flatDictionary)
else
//-----> Here we are creating a new String for each recursive call !!!!<----
flattenDictionary(initialKey + "." + key, value, flatDictionary)
}
}
}
我懷疑是在箭頭。
我們遞歸地傳遞給flattenDictionary()
方法一個新的字符串,每次連接initialKey
和我們從Map獲得的新的。
在這裏,我們有可能造成很多長串!
是否有可能避免產生所有這些字符串?
我不認爲通過StringBuilder的可能是一個解決方案,因爲我們最終會得到錯誤的結果
由於字符串是不可變的,你總是創建一個新的。 Stringbuilder tho使用內部的'char []'來存儲值 –