Java LeetCode每日一题-从易到难带你领略算法的魅力(一):上升下降字符串
生活随笔
收集整理的這篇文章主要介紹了
Java LeetCode每日一题-从易到难带你领略算法的魅力(一):上升下降字符串
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
上升下降字符串
- 1.題目要求
- 2.題目示例
- 3.提示
- 4.解題
- 4.1 解題思路
- 4.2 業(yè)務(wù)代碼
- 4.3 運行結(jié)果
- 5.優(yōu)化
- 5.1 優(yōu)化思路
- 5.2 優(yōu)化業(yè)務(wù)代碼
- 5.3 優(yōu)化結(jié)果
- 6.總結(jié)
1.題目要求
給你一個字符串 s ,請你根據(jù)下面的算法重新構(gòu)造字符串:
在任何一步中,如果最小或者最大字符不止一個 ,你可以選擇其中任意一個,并將其添加到結(jié)果字符串。
請你返回將 s 中字符重新排序后的 結(jié)果字符串 。
2.題目示例
- 示例 1:
- 示例 2:
- 示例 3:
- 示例 4:
- 示例 5:
3.提示
- 1 <= s.length <= 500
- s 只包含小寫英文字母。
- Count the frequency of each character.
計算每個字符的頻率。 - Loop over all character from ‘a(chǎn)’ to ‘z’ and append the character if it exists and decrease frequency by 1. Do the same from ‘z’ to ‘a(chǎn)’.
循環(huán)遍歷從“a”到“z”的所有字符,如果該字符存在,則追加該字符,并將頻率降低1。從“z”到“a”做同樣的事情。 - Keep repeating until the frequency of all characters is zero.
一直重復(fù),直到所有字符的頻率為零。
4.解題
4.1 解題思路
在看完題目過后:
- 提取關(guān)鍵信息
- 具體思路
4.2 業(yè)務(wù)代碼
class Solution {public String sortString(String s) {int[] num = new int[26];for (int i = 0; i < s.length(); i++) {num[s.charAt(i) - 'a']++;}StringBuffer sb = new StringBuffer();while (sb.length() < s.length()) {for (int i = 0; i < 26; i++) {if (num[i] > 0) {sb.append((char) (i + 'a'));num[i]--;}}for (int i = 25; i >= 0; i--) {if (num[i] > 0) {sb.append((char) (i + 'a'));num[i]--;}}}return sb.toString();} }4.3 運行結(jié)果
5.優(yōu)化
5.1 優(yōu)化思路
不使用 StringBuilder 而是使用char類型的數(shù)組來存儲會不會有奇效
但是使用數(shù)組來作為存儲媒介的話while的判斷就需要另外的值來表示char已經(jīng)插入了多少數(shù)據(jù)
5.2 優(yōu)化業(yè)務(wù)代碼
class Solution {public String sortString(String s) {int[] num = new int[26];for (int i = 0; i < s.length(); i++) {num[s.charAt(i) - 'a']++;}char[] res = new char[s.length()];int index = 0;while (index < s.length()) {for (int i = 0; i < 26; i++) {if (num[i] != 0) {res[index++] = (char) (i + 'a');num[i]--;}}for (int i = 25; i >= 0; i--) {if (num[i] != 0) {res[index++] = (char) (i + 'a');num[i]--;}}}return new String(res);} }5.3 優(yōu)化結(jié)果
6.總結(jié)
作為力扣系列的第一天,到最后也只是優(yōu)化了0.2MB的內(nèi)存空間出來,還是有點小傷心的。如果大家有更好的解決方案可以直接在下面留言。
總結(jié)
以上是生活随笔為你收集整理的Java LeetCode每日一题-从易到难带你领略算法的魅力(一):上升下降字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab预测误差,Matlab的神经
- 下一篇: 自己动手开发编译器