LeetCode筆記:482. License Key Formatting

問(wèn)題:

Now you are given a string S, which represents a software license key which we would like to format. The string S is composed of alphanumerical characters and dashes. The dashes split the alphanumerical characters within the string into groups. (i.e. if there are M dashes, the string is split into M+1 groups). The dashes in the given string are possibly misplaced.
We want each group of characters to be of length K (except for possibly the first group, which could be shorter, but still must contain at least one character). To satisfy this requirement, we will reinsert dashes. Additionally, all the lower case letters in the string must be converted to upper case.
So, you are given a non-empty string S, representing a license key to format, and an integer K. And you need to return the license key formatted according to the description above.
Example 1:

Input: S = "2-4A0r7-4k", K = 4
Output: "24A0-R74K"
Explanation: The string S has been split into two parts, each part has 4 characters.

Example 2:

Input: S = "2-4A0r7-4k", K = 3
Output: "24-A0R-74K"
Explanation: The string S has been split into three parts, each part has 3 characters except the first part as it could be shorter as said above.

Note:

  1. The length of string S will not exceed 12,000, and K is a positive integer.
  2. String S consists only of alphanumerical characters (a-z and/or A-Z and/or 0-9) and dashes(-).
  3. String S is non-empty.

大意:

現(xiàn)在給你一個(gè)字符串S碉哑,代表我們想要組成的一個(gè)軟件的序列號(hào)踏揣。字符串S由數(shù)字和字母以及破折號(hào)組成狭瞎。破折號(hào)將數(shù)字和字母分割成一組組。(比如程梦,如果有M個(gè)破折號(hào),則字符串被分為M+1組)橘荠。字符串中的破折號(hào)可能放錯(cuò)了位置屿附。
我們想要每組字符的長(zhǎng)度為K(除了第一組可能短一些,但必須至少包含一個(gè)字符)哥童。要滿足這些要求挺份,我們會(huì)重新插入破折號(hào)。此外贮懈,所有的小寫(xiě)字母必須轉(zhuǎn)換成大寫(xiě)字母匀泊。
所以,給你一個(gè)非空字符串S朵你,代表要組成的序列號(hào)燃乍,以及一個(gè)整數(shù)K墨技。你需要根據(jù)上面的描述返回正確的序列號(hào)。
例1:

輸入: S = "2-4A0r7-4k", K = 4
輸出:"24A0-R74K"
解釋:字符串S被分為兩組,每組有4個(gè)字符淀衣。

例2:

輸入:S = "2-4A0r7-4k", K = 3
輸出:"24-A0R-74K"
解釋:字符串S被分為三部分,每部分有三個(gè)字符屁置,除了第一部分如上所說(shuō)可以短一點(diǎn)疆虚。

注意:

  1. 字符串S的長(zhǎng)度不會(huì)超過(guò)12000,K是個(gè)正數(shù)水孩。
  2. 字符串S只由數(shù)字及字母(a-z 和/或 A-Z 和/或 0-9)以及破折號(hào)(-)組成镰矿。
  3. 字符串S非空。

思路:

題目說(shuō)了一長(zhǎng)串荷愕,其實(shí)總結(jié)起來(lái)就是:

給一個(gè)字符串和正整數(shù)衡怀,將字符串用破折號(hào)分成多個(gè)長(zhǎng)度為K的組(第一組可以小于K)棍矛,所有字母必須為大寫(xiě)。

其實(shí)還是很容易的抛杨,因?yàn)榈谝唤M不一定長(zhǎng)度為K够委,所以我們從后往前來(lái)重組,遇到小寫(xiě)字母就換成大寫(xiě)字母怖现,結(jié)果中每放完K個(gè)字符就加一個(gè)破折號(hào)茁帽,遍歷字符串時(shí)遇到破折號(hào)直接跳過(guò),為了速度我們使用StringBuffer來(lái)處理結(jié)果字符串屈嗤,處理完后再將結(jié)果翻轉(zhuǎn)潘拨,才是正確的順序。注意最后可能會(huì)在結(jié)果的開(kāi)頭出現(xiàn)一個(gè)破折號(hào)饶号,也就是未翻轉(zhuǎn)前的最后铁追,這時(shí)候要去除掉。

代碼(Java):

public class Solution {
    public String licenseKeyFormatting(String S, int K) {
        char[] sArr = S.toCharArray();
        String result = "";
        StringBuffer sBuffer = new StringBuffer(result);
        int length = 0;
        for (int i = sArr.length-1; i >= 0; i--) {
            if (sArr[i] - '-' == 0) continue;
            
            if (sArr[i] - 'a' >= 0) sArr[i] = (char)(sArr[i] - 32);
            sBuffer.append(sArr[i]);
            length ++;
            
            if (length == K) {
                sBuffer.append('-');
                length = 0;
            }
        }
        if (sBuffer.length() > 0 && sBuffer.charAt(sBuffer.length()-1) - '-' == 0) sBuffer.delete(sBuffer.length()-1, sBuffer.length());
        sBuffer.reverse();
        result = sBuffer.toString();
        return result;
    }
}

他山之石:

    public String licenseKeyFormatting(String s, int k) {
        StringBuilder sb = new StringBuilder();
        for (int i = s.length() - 1; i >= 0; i--)
            if (s.charAt(i) != '-')
                sb.append(sb.length() % (k + 1) == k ? '-' : "").append(s.charAt(i));
        return sb.reverse().toString().toUpperCase();
    } 

上面的代碼時(shí)對(duì)前面的思路的極致簡(jiǎn)潔茫船。

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁(yè)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末琅束,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子算谈,更是在濱河造成了極大的恐慌涩禀,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件然眼,死亡現(xiàn)場(chǎng)離奇詭異艾船,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)高每,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)屿岂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人觉义,你說(shuō)我怎么就攤上這事雁社。” “怎么了晒骇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵霉撵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我洪囤,道長(zhǎng)徒坡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任瘤缩,我火速辦了婚禮喇完,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剥啤。我一直安慰自己锦溪,他們只是感情好不脯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著刻诊,像睡著了一般防楷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上则涯,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天复局,我揣著相機(jī)與錄音,去河邊找鬼粟判。 笑死亿昏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的档礁。 我是一名探鬼主播角钩,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呻澜!你這毒婦竟也來(lái)了彤断?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤易迹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后平道,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體睹欲,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年一屋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窘疮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冀墨,死狀恐怖闸衫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诽嘉,我是刑警寧澤蔚出,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站虫腋,受9級(jí)特大地震影響骄酗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悦冀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一趋翻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盒蟆,春花似錦踏烙、人聲如沸师骗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辟癌。三九已至,卻和暖如春步脓,著一層夾襖步出監(jiān)牢的瞬間愿待,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工靴患, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仍侥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓鸳君,卻偏偏與公主長(zhǎng)得像农渊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子或颊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)砸紊。 張土汪:刷leetcod...
    土汪閱讀 12,743評(píng)論 0 33
  • 小時(shí)候,家里挺窮囱挑,當(dāng)然隔壁鄰居也好不到哪里去 那個(gè)年代大家都窮醉顽。六歲前沒(méi)心沒(méi)肺地在長(zhǎng)沙最繁華地段的巷子里長(zhǎng)大,鉆...
    宜喜樂(lè)閱讀 373評(píng)論 2 1
  • 摘自:《入道安心要方便法門(mén)》 四祖道信禪師著 《觀無(wú)量壽經(jīng)》云:諸佛法身,入一切眾生心想通熄,是心是佛唆涝,是心作佛。當(dāng)知...
    了義讀經(jīng)閱讀 398評(píng)論 0 0
  • 一唇辨、報(bào)考條件 1廊酣、學(xué)歷 普通本科 入學(xué)前獲得畢業(yè)證書(shū) 2018年畢業(yè) 12月份考 9月開(kāi)學(xué)? 那么2017.12月...
    貴族沒(méi)有借口閱讀 235評(píng)論 0 0
  • 1 老有人問(wèn)我赏枚,你是哪兒人亡驰。 我說(shuō),我是四川人饿幅。 你四川人不會(huì)打麻將隐解,你四川人不會(huì)打牌? 看著朋友那驚訝的表情诫睬,我...
    唯川閱讀 380評(píng)論 1 1