Simple solution with heap - Plus compare str1 and str2 function
\nfunc kthLargestNumber(nums []string, k int) string {\n    var heap []string\n    \n    for i := 0; i < len(nums); i++ {\n        heap = append(heap, nums[i])\
```\nfunc kthLargestNumber(nums []string, k int) string {\n    var heap []string\n    \n    for i := 0; i < len(nums); i++ {\n        heap = append(heap, nums[i])\n        heapUp(heap, len(heap)-1)\n        \n        if len(heap) > k {\n            heap[0] = heap[len(heap)-1]\n            heap = heap[:len(heap)-1]\n            heapDown(heap, 0, len(heap)-1)\n        }\n    }\n    \n    return heap[0]\n}\n\nfunc heapUp(heap []string, position int) {\n    parent := (position-1)/2\n\n    if parent >= 0 && compare(heap[position], heap[parent]) == -1 {\n        heap[parent], heap[position] = heap[position], heap[parent]\n        heapUp(heap, parent)\n    }\n}\n\nfunc heapDown(heap []string, position, limit int) {\n    l, r := 2*position+1, 2*position+2\n    smaller := position\n    \n    if l <= limit && compare(heap[l], heap[smaller]) == -1 {\n        smaller = l\n    }\n    \n    if r <= limit && compare(heap[r], heap[smaller]) == -1 {\n        smaller = r\n    }\n    \n    if smaller != position {\n        heap[smaller], heap[position] = heap[position], heap[smaller]\n        heapDown(heap, smaller, limit)\n    }\n}\n\nfunc compare(s1, s2 string) int {\n    if len(s1) > len(s2) {\n        return 1\n    }\n    \n    if len(s1) < len(s2) {\n        return -1\n    }\n    \n    res := 1\n    \n    for i := 0; i < len(s1); i++ {\n        if s1[i] > s2[i] {\n            return 1\n        } else if s1[i] < s2[i] {\n            return -1\n        }\n    }\n    \n    return res\n}\n```
['Heap (Priority Queue)', 'Go']