leetcode系列 767重構字串

2021-10-11 01:33:48 字數 1821 閱讀 9242

剛剛拿到題目的時候,我覺得這道題目還是蠻簡單的,想到的第乙個辦法就是插空。

簡單來說就是:

統計字母出現的次數

判斷是否可以做到把字母隔開,也就是 乙個字母出現的次數要小於(n+1) / 2

然後將字母按順序插空——每隔乙個空插入,如果該空有字母存在則在下乙個空格插入。

說幹就幹,一頓洋洋灑灑的操作後,**如下:

class solution

//判斷是否有超過一半的字母是相同的。

int count = 0;

for(int i = 0; i < alphabets.length; i++)else if(alphabets[i] > 0)

while(newstring[count] != 0)

newstring[count] = (char)(i+97);

count += 2;}}

}return string.valueof(newstring);

}

}

結果如下:

很是悲壯。

痛定思痛——————!~!————————————

看到例子錯誤的原因主要是:出現較多的次數的字母在後面,前面的位置都被出現次數較少的字母給佔了。

原來我還差乙個排序,嘿嘿

這次調整思路:

統計字母出現的次數

判斷是否可以做到把字母隔開,也就是 乙個字母出現的次數要小於(n+1) / 2

然後將字母按出現次數大小順序插空——每隔乙個空插入,如果該空有字母存在則在下乙個空格插入。

這裡出現了乙個很糾結的點:我應該要怎麼排序?

這裡的排序要求是出現的次數大小排序,並且將出現次數的字母給帶出來。沒有想到什麼好的方法,

兩個元素一起的我就想到了map,在想key存字母,value存出現的次數。完美!

結果想到map是不能排序的,因為hashmap是根據key的hash值來儲存的。

那麼只好折中了,把value的值拿出來,排序。然後遍歷map找到最大的value,將value個key插入到陣列中。

結果又出現乙個問題:如果又兩個相同的value,那麼就會出現陣列越界的情況。

針對這乙個問題,我的解決辦法是每次插入完乙個key後,將改key從map中移除。這樣就避免了問題。

通過**如下:

class solution else

}

int counts = new int[alphabet.size()];

int count = 0;

for(character c : alphabet.keyset())

arrays.sort(counts);

int location = 0;

for(int i = counts.length-1; i >= 0; i--)

break;}}

alphabet.remove(c1);

}return string.valueof(newstring);

}

敲完**發現用了四次迴圈:先迴圈一層排序好的value

在迴圈map找相應的key

再迴圈value將key插入陣列中

外加乙個對陣列有值的情況,有乙個while使得插入陣列的指標偏移的操作

寫完戰戰兢兢的提交了**,結果發現通過了。並且拿到了11月的每日打卡的勳章。有點小感動。

總結一下:

一開始的思路是沒有錯的,但是沒有考慮全。沒有考慮到出現次數較多的的排在後面的情況

後面看到錯誤的案例後,及時調整。在寫**的時候,針對同乙個value可能會造成陣列溢位的情況沒有考慮到

總的來說就是沒有考慮清楚邊界的問題。

Leetcode 767 重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 解題思路 任務排程問題,排序。本題有點像之前的乙個任務排程問題,由於題量太大,忘了哪乙個。統計當前...

leetcode 767 重構字串

描述 給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 s 只包含小寫字母並且長度在 1,500 區間內。思路從小到大,交叉著插入 bool cmp...

LeetCode 767 重構字串

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 s 只包含小寫字母並且長度在 1,500 區間內。通過次數13,259 提交次數30,089思路 ...