字串的前半和後半是否相似 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

avatar-img
91會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給定我們一棵二元數Binary Tree的根結點。 問我們任意祖先節點和晚輩節點之間,最大的差值的絕對值是多少? 題目的原文敘述 測試範例 Example 1: Input: root = [8,3,10,1,6,null,14,null,null,4,7,13] Ou
題目敘述 題目會給定我們一棵二元數Binary Tree的根結點。 並且給定感染的病毒源節點位置,每個單位時間,可以向相鄰的節點感染一次,問我們需要多少時間去感染整棵樹? 題目的原文敘述 測試範例 Example 1: Input: root = [1,5,3,null,4,10,6,
題目敘述 題目會給定我們一顆二元搜索樹BST的根結點, 還有一個指定區間的上邊界R 和 下邊界L。 請問二元搜索樹中,所有落在指定區間內的節點元素值的總和是多少? 題目的原文敘述 測試範例 Example 1: Input: root = [10,5,15,3,7,null,18], l
題目敘述 題目會給我們一個整數陣列,裡面包含各種正整數,每回合可以消去兩個相同的數字,或者消去三個相同的數字。問最少需要幾次消去,才能讓陣列為空? 如果無解,則返回-1 詳細的題目可在這裡看到 測試範例 Example 1: Input: nums = [2,3,3,2,2,4,2,3,
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
題目敘述 題目會給我們兩張資料表。 第一張資料表是Employees 裡面分別有id、name等欄位。這張資料表的id是主鍵。 第二張資料表是EmployeeUNI 裡面分別有id、unique_id等欄位。 題目要求我們列出每位員工對應到的Unique ID
題目敘述 題目會給定我們一棵二元數Binary Tree的根結點。 問我們任意祖先節點和晚輩節點之間,最大的差值的絕對值是多少? 題目的原文敘述 測試範例 Example 1: Input: root = [8,3,10,1,6,null,14,null,null,4,7,13] Ou
題目敘述 題目會給定我們一棵二元數Binary Tree的根結點。 並且給定感染的病毒源節點位置,每個單位時間,可以向相鄰的節點感染一次,問我們需要多少時間去感染整棵樹? 題目的原文敘述 測試範例 Example 1: Input: root = [1,5,3,null,4,10,6,
題目敘述 題目會給定我們一顆二元搜索樹BST的根結點, 還有一個指定區間的上邊界R 和 下邊界L。 請問二元搜索樹中,所有落在指定區間內的節點元素值的總和是多少? 題目的原文敘述 測試範例 Example 1: Input: root = [10,5,15,3,7,null,18], l
題目敘述 題目會給我們一個整數陣列,裡面包含各種正整數,每回合可以消去兩個相同的數字,或者消去三個相同的數字。問最少需要幾次消去,才能讓陣列為空? 如果無解,則返回-1 詳細的題目可在這裡看到 測試範例 Example 1: Input: nums = [2,3,3,2,2,4,2,3,
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
題目敘述 題目會給我們兩張資料表。 第一張資料表是Employees 裡面分別有id、name等欄位。這張資料表的id是主鍵。 第二張資料表是EmployeeUNI 裡面分別有id、unique_id等欄位。 題目要求我們列出每位員工對應到的Unique ID
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
大會報告,彼岸橫空出世(並沒有 我不知道…… 距離完成《彼岸盡頭的那顆草》已經過了兩天,我仍有點懵。 從一直很緊繃、很心急想要完成的狀態,突然變成不知接下來要幹嘛的茫然。 我甚至沒有像目睹Faker奪得第五冠的那瞬間,那樣興奮、那樣激動、那樣開心。 雖然在重寫第39章時心理是非常雀躍的
Thumbnail
想要學習如何賺大錢嗎?快點加入行列,加入我的LINE ID : income8899 我每天都會預測早盤與夜盤的期貨點位,讓學生知道哪裡該做空哪裡該做多
Thumbnail
大家應該都聽過一句話:「錢不是萬能的,但沒錢萬萬不能。」雖然這話有點老套,但不得不說,這真的是句硬道理。錢,不只是用來買東西的,它其實更像是一種「意念的延伸」。等一下!別急著翻白眼,我知道你可能會問:「賺錢還要搞靈性嗎?」其實沒那麼玄,簡單來說,錢能幫我們實現想法,還能帶成果回來。
Thumbnail
1.0 從函數到函算語法 1.1 句子成份 本書關注的是句子成份的分析。 如前述,詞類和句子成份是兩個很不一樣的概念。 詞類的劃分屬歸類性的描述。我們先有一個給定的詞彙,然後劃分若干詞類,比如名詞﹑動詞﹑形容詞等,再進而對詞彙中的每一個詞進行分類,即說某詞屬名詞﹑某詞屬動詞﹑某詞可以是名
Thumbnail
這篇文章介紹了 Swift 中字串的比較方法,並討論了使用日期字串進行比較的結果。同時也介紹了數字字串、符號字串和表情符號字串的比較原理。最後指出比較日期字串還是要轉成Date才是安全的做法。
Thumbnail
在比賽裡這就是大家拚手速的題目了,準備好了嗎?
Thumbnail
目錄 序 導論: 一個西方觀點的評述 1.0 從函數到函數算法 ......1.1 句子成份
Thumbnail
昨天已經有預告,假設今天爆大量開高必須要多單先跑,甚至順便放空。不過主力很頑皮,搞一出開盤就大跌給你看,但我已經有提醒,今天是新加坡富台指結算日,主力正在今天轉倉佈局,由於新加坡富台指的法人與主力部位無法得知,這是隱形的部位。因此今天會搞怪也是不意外。 先前已經有告知,指數再度回測20000點
Thumbnail
題目敘述 題目會給我們一個輸入字串s,題目還保證字串s的長度一定是偶數。 要求我們判定字串s的前半部和後半部是否相似? 在本題中,兩個字串相似的定義為兩個字串都擁有相同的母音英文字母: 註: 母音英文字母為a, e, i, o, u, A, E, I, O, U 題目的原文敘述 測試
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
大會報告,彼岸橫空出世(並沒有 我不知道…… 距離完成《彼岸盡頭的那顆草》已經過了兩天,我仍有點懵。 從一直很緊繃、很心急想要完成的狀態,突然變成不知接下來要幹嘛的茫然。 我甚至沒有像目睹Faker奪得第五冠的那瞬間,那樣興奮、那樣激動、那樣開心。 雖然在重寫第39章時心理是非常雀躍的
Thumbnail
想要學習如何賺大錢嗎?快點加入行列,加入我的LINE ID : income8899 我每天都會預測早盤與夜盤的期貨點位,讓學生知道哪裡該做空哪裡該做多
Thumbnail
大家應該都聽過一句話:「錢不是萬能的,但沒錢萬萬不能。」雖然這話有點老套,但不得不說,這真的是句硬道理。錢,不只是用來買東西的,它其實更像是一種「意念的延伸」。等一下!別急著翻白眼,我知道你可能會問:「賺錢還要搞靈性嗎?」其實沒那麼玄,簡單來說,錢能幫我們實現想法,還能帶成果回來。
Thumbnail
1.0 從函數到函算語法 1.1 句子成份 本書關注的是句子成份的分析。 如前述,詞類和句子成份是兩個很不一樣的概念。 詞類的劃分屬歸類性的描述。我們先有一個給定的詞彙,然後劃分若干詞類,比如名詞﹑動詞﹑形容詞等,再進而對詞彙中的每一個詞進行分類,即說某詞屬名詞﹑某詞屬動詞﹑某詞可以是名
Thumbnail
這篇文章介紹了 Swift 中字串的比較方法,並討論了使用日期字串進行比較的結果。同時也介紹了數字字串、符號字串和表情符號字串的比較原理。最後指出比較日期字串還是要轉成Date才是安全的做法。
Thumbnail
在比賽裡這就是大家拚手速的題目了,準備好了嗎?
Thumbnail
目錄 序 導論: 一個西方觀點的評述 1.0 從函數到函數算法 ......1.1 句子成份
Thumbnail
昨天已經有預告,假設今天爆大量開高必須要多單先跑,甚至順便放空。不過主力很頑皮,搞一出開盤就大跌給你看,但我已經有提醒,今天是新加坡富台指結算日,主力正在今天轉倉佈局,由於新加坡富台指的法人與主力部位無法得知,這是隱形的部位。因此今天會搞怪也是不意外。 先前已經有告知,指數再度回測20000點
Thumbnail
題目敘述 題目會給我們一個輸入字串s,題目還保證字串s的長度一定是偶數。 要求我們判定字串s的前半部和後半部是否相似? 在本題中,兩個字串相似的定義為兩個字串都擁有相同的母音英文字母: 註: 母音英文字母為a, e, i, o, u, A, E, I, O, U 題目的原文敘述 測試