力扣423(java)-從英文中重建數字(中等)
阿新 • • 發佈:2022-05-16
題目:
給你一個字串 s ,其中包含字母順序打亂的用英文單詞表示的若干數字(0-9)。按 升序 返回原始的數字。
示例 1:
輸入:s = "owoztneoer"
輸出:"012"
示例 2:
輸入:s = "fviefuro"
輸出:"45"
提示:
1 <= s.length <= 105
s[i] 為 ["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"] 這些字元之一
s 保證是一個符合題目要求的字串
來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/reconstruct-original-digits-from-english
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解題思路:
1.首先對每個字母進行詞頻統計;
2.可以觀察出:
- z,w,u,x,g都只在0,2,4,6,8中出現,故這幾個字母出現幾次,這幾個數字就出現幾次;
- h只有3和8中出現,已知8的次數,可以得知3的次數;
- f只有4和5中出現,已知4的次數,可以得知5的次數;
- s只有6和7中出現,已知6的次數,可以得知7的次數;
- o有0、1、2、4中出現,前面已知0、2、4的次數,可以得知1的次數;
- i有5、6、8、9中出現,前面已知5、6、8的次數,可以得知9的次數。
3.然後按照升序進行新增,最後轉換成字串進行返回。
程式碼:
1 class Solution { 2 publicString originalDigits(String s) { 3 int[] count = new int[26]; 4 for(int i = 0; i< s.length(); i++){ 5 count[s.charAt(i) - 'a'] ++; 6 } 7 int[] num = new int[10]; 8 num[0] = count['z' - 'a']; 9 num[2] = count['w' - 'a']; 10 num[6] = count['x' - 'a'];11 num[8] = count['g' - 'a']; 12 num[4] = count['u' - 'a']; 13 num[3] = count['h' - 'a'] - num[8]; 14 num[5] = count['f' - 'a'] - num[4]; 15 num[7] = count['s' - 'a'] - num[6]; 16 num[1] = count['o' - 'a'] - num[0] - num[2] - num[4]; 17 num[9] = count['i' - 'a'] - num[5] - num[6] - num[8]; 18 StringBuffer res = new StringBuffer(); 19 for(int i = 0 ; i < 10; i++){ 20 for(int j = num[i]; j > 0; j--){ 21 res.append(i); 22 } 23 } 24 return res.toString(); 25 26 } 27 }