字串的前半和後半是否相似 If String Halves Are Alike_Leetcode #1704

閱讀時間約 4 分鐘

題目敘述

題目會給我們一個輸入字串s,題目還保證字串s的長度一定是偶數。

要求我們判定字串s的前半部和後半部是否相似?

在本題中,兩個字串相似的定義為兩個字串都擁有相同的母音英文字母:

註: 母音英文字母為a, e, i, o, u, A, E, I, O, U


題目的原文敘述


測試範例

Example 1:

Input: s = "book"
Output: true
Explanation: a = "bo" and b = "ok". a has 1 vowel and b has 1 vowel. Therefore, they are alike.

Example 2:

Input: s = "textbook"
Output: false
Explanation: a = "text" and b = "book". a has 1 vowel whereas b has 2. Therefore, they are not alike.
Notice that the vowel o is counted twice.

約束條件

  • 2 <= s.length <= 1000

字串s的長度介於2~1000之間。

  • s.length is even.

字串s的長度一定是偶數。

  • s consists of uppercase and lowercase letters.

字串s只會包含大寫和小寫的英文字母。


演算法

因為題目已經保證字串s長度一定是偶數,因此,直接從中心點分割字串,分別計算前半段的母音數量,和後半段的母音數量,若兩者擁有的母音數量相同,則兩個字串是相似字串。

python裡面有一個實用的切片語法,

s[:索引編號]可以切出從s[0]~s[索引編號-1]的字串。

s[索引編號:]可以切出從s[索引編號]~s[len(s)-1]的字串。

第一次接觸切片語法slice的同學,可以參考這裡的官方文件說明


程式碼

class Solution:
def halvesAreAlike(self, s: str) -> bool:

# --------------------------------------------------------
def countVowels(s):

# compute and return the number of vowel letters in s
vowel = set("aeiouAEIOU")

return sum( 1 for char in s if char in vowel )

# --------------------------------------------------------

size = len(s)

# It is guaranteed that s is of even length
midpoint = size // 2

# get substring of a as well as b
a, b = s[:midpoint], s[midpoint:]

# check with definition of "alike", given by description
return countVowels(a) == countVowels(b)

複雜度分析

時間複雜度:

切割時間耗費O(n),計算字串裡面的母音數量已耗費O(n),總共所需時間為O(n)

空間複雜度:

會需要額外的兩個臨時空間去儲存字串的前半段a和後半段b,所需空間為O(n)


Reference:

[1] Determine if String Halves Are Alike - LeetCode

53會員
342內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
avatar
邱品齊皮膚科醫師
2023-04-27
Lua 宇宙編年史 #10: 字串星雨Lua 宇宙編年史 #10: 功能星井
Thumbnail
avatar
KH Huang
2023-10-08
Python 詩編 #6: 字串的編織Python 詩編 #6: 字串的編織
Thumbnail
avatar
KH Huang
2023-08-31
[C#] 程式設計教學:如何去除字串頭尾的空格在C#程式設計中,處理字串操作是一個常見的任務。有時候,我們可能需要去除字串中不需要的空格,特別是在處理使用者輸入、讀取檔案或處理資料庫查詢結果時。在這篇教學中,我們將學習如何使用C#內建的方法來去除字串頭尾的空格。
Thumbnail
avatar
Pochi
2023-08-09
使用 C# 移除字串中的重音/變音符由於遇到系統不支援歐洲語系的重音符號或變音符號因此有了這篇文章
Thumbnail
avatar
Neo Kusanagi
2023-07-31
[Python] 字串的切割與組合在Python中,join()和split()是用於處理字串的切割與組合的方法。
avatar
Pochi
2023-06-11
[Python] 字串的大小寫處理函數upper() 函數 lower() 函數
avatar
Pochi
2023-06-10
取得Enum列舉定義的字串取得Enum列舉定義的字串
avatar
Tsang Ch. 馬鈴薯蒼哥
2022-09-12
nodejs 字串參考 : https://www.w3school.com.cn/jsref/jsref_replace.ASP 取代字串方式 取代找到的第一個 全取代 str.replace(/原始字詞/g, '新字詞');
avatar
work b
2022-05-30
不燒腦excel移除重複值+字串連接工作上臨時需要,去搜尋了各類文章,但concat函數excel好像會有版本限制,我用公式臨時調不出想要的結果...... 需求:移除重複欄位、把各欄位的內容用逗號(,)做連接 方法:找到移除重複的功能按鈕、使用&連接、使用excel的自動填滿功能
Thumbnail
avatar
Carol
2022-05-17
【Day 3 】基礎教學 - 變數、資料型態、運算子、常用的字串函式進入我們python教學的第3天,正式要進入程式的教學了,首先當然要先從基礎的語法開始教起,我們必須基礎打穩,這樣往後在學進階程式的時候就能更得心應手,所以別略過基礎教學唷!!(程式碼位於文章下方)
Thumbnail
avatar
陳陳
2021-03-07