前往
大廳
主題

LeetCode - 709. To Lower Case 解題心得

Not In My Back Yard | 2020-12-30 00:00:08 | 巴幣 0 | 人氣 133

題目連結:


題目意譯:
實作函式 ToLowerCase() ,其以 str 作為字串參數,且回傳同樣的字串但所有字母皆轉為小寫。



範例測資:
範例 1:
輸入: "Hello"
輸出: "hello"

範例 2:
輸入: "here"
輸出: "here"

範例 3:
輸入: "LOVELY"
輸出: "lovely"


解題思維:
這題免不了掃過所有字元。但是我們真的只能用「判斷」一個字母是大寫還是小寫來決定要不要轉成小寫嗎?

答案是「不需要」。至少這題是如此。



觀察 ASCII 編碼中的英文字母之部分(可以參見維基頁面的表格):
A 位於編碼值 01000001 (這邊統一寫二進位的值)、
a 位於編碼值 01100001;

B 位於編碼值 01000010、
b 位於編碼值 01100010;

C 位於編碼值 01000011、
c 位於編碼值 01100011;
……

看出規律了嗎?可以看到大寫與小寫的 ASCII 編碼只差一個位元,即從右邊數來第 6 個位元(代表 2 ^ 5 = 32 的位置)。

雖然這題沒有明講,但是所有字串字元只會是英文字母,不會有其他種類的字元。

因此我們可以直接掃過每個字母,然後直接將每個字母的第 6 個位元統一設為 1 (可以用位元遮罩(Bit Mask)的方式),便可以確保每個字母都是小寫的型態。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作