<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
面試題 01.09. 字串輪轉 難度:easy
字串輪轉。給定兩個字串 s1
和 s2
,請編寫程式碼檢查 s2
是否為 s1
旋轉而成(比如,waterbottle
是 erbottlewat
旋轉後的字串)。
範例1:
輸入:s1 = "waterbottle", s2 = "erbottlewat"
輸出:True
範例2:
輸入:s1 = "aa", s2 = "aba"
輸出:False
提示:
通過模擬字串輪轉的過程,來進行字串的比較,最後得出結論,s2
是否為 s1
旋轉而成;
首先比較字串的長度,如果兩個字串的長度都不一樣,那肯定就不是有旋轉而成的,虛擬碼如下:
if len(s1) != len(s2): return False else: ... # 接著往下走
然後再通過遍歷將倆字串進行一一比較,比如指標先指向 s1
的第一位,移動 s2
直到找到與之匹配的,再接著往下,如果不對則結束接下來的匹配,然後將指標指向 s1
的下一位,如此往復,一直到遍歷完 s1
,虛擬碼如下:
for ..s1: for ..s2: if s1[(i + j) % n] != s2[j]: break else: return True
Python:
class Solution: def isFlipedString(self, s1: str, s2: str) -> bool: m, n = len(s1), len(s2) if m != n: return False if n == 0: return True for i in range(n): for j in range(n): if s1[(i + j) % n] != s2[j]: break else: return True return False
Java:
class Solution { public boolean isFlipedString(String s1, String s2) { int m = s1.length(), n = s2.length(); if (m != n) { return false; } if (n == 0) { return true; } for (int i = 0; i < n; i++) { boolean flag = true; for (int j = 0; j < n; j++) { if (s1.charAt((i + j) % n) != s2.charAt(j)) { flag = false; break; } } if (flag) { return true; } } return false; } }
通過將兩個相同的 s1
進行拼接,獲得新的字串,然後從這個新的字串中搜尋 s2
,即 s2
是新字串的子串;
比如,s1
為 abcd
,s2
為 cdab
,然後兩個 s1
拼接成 abcdabcd
這個新字串 s3
,可以發現 s2
就是 s3
的子串,如果 s1
無法通過旋轉得到 s2
,那麼自然就不是 s3
的子串了,所以虛擬碼如下:
s3 = s1 + s1 if s2 in s3: return True else: return False
Python:
class Solution: def isFlipedString(self, s1: str, s2: str) -> bool: return len(s1) == len(s2) and s2 in s1 + s1
Java:
class Solution { public boolean isFlipedString(String s1, String s2) { return s1.length() == s2.length() && (s1 + s1).contains(s2); } }
1480. 一維陣列的動態和 難度:easy
給你一個陣列 nums
。陣列「動態和」的計算公式為:runningSum[i] = sum(nums[0]…nums[i])
。
請返回 nums
的動態和。
範例 1:
輸入:nums = [1,2,3,4]
輸出:[1,3,6,10]
解釋:動態和計算過程為 [1, 1+2, 1+2+3, 1+2+3+4] 。
範例 2:
輸入:nums = [1,1,1,1,1]
輸出:[1,2,3,4,5]
解釋:動態和計算過程為 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。
範例 3:
輸入:nums = [3,1,2,10,1]
輸出:[3,4,6,16,17]
提示:
1 <= nums.length <= 1000
-10^6 <= nums[i] <= 10^6
這題比較基礎,適合用於瞭解什麼是字首和,以及初步的嘗試使用字首和;
根據題目意思,是要求陣列的動態和,即當前數應該等於這個數的舊值和前面一個值的和,fn = fn + fn-1
;
Python:
class Solution: def runningSum(self, nums: List[int]) -> List[int]: n = len(nums) for i in range(1, n): nums[i] += nums[i - 1] return nums
Java:
class Solution { public int[] runningSum(int[] nums) { int n = nums.length; for (int i = 1; i < n; i++) { nums[i] += nums[i - 1]; } return nums; } }
724. 尋找陣列的中心下標 難度:easy
給你一個整數陣列 nums
,請計算陣列的 中心下標 。
陣列 中心下標 是陣列的一個下標,其左側所有元素相加的和等於右側所有元素相加的和。
如果中心下標位於陣列最左端,那麼左側數之和視為 0
,因為在下標的左側不存在元素。這一點對於中心下標位於陣列最右端同樣適用。
如果陣列有多箇中心下標,應該返回 最靠近左邊 的那一個。如果陣列不存在中心下標,返回 -1
。
範例 1:
輸入:nums = [1, 7, 3, 6, 5, 6]
輸出:3
解釋:
中心下標是 3 。
左側數之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,
右側數之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。
範例 2:
輸入:nums = [1, 2, 3]
輸出:-1
解釋:
陣列中不存在滿足此條件的中心下標。
範例 3:
輸入:nums = [2, 1, -1]
輸出:0
解釋:
中心下標是 0 。
左側數之和 sum = 0 ,(下標 0 左側不存在元素),
右側數之和 sum = nums[1] + nums[2] = 1 + -1 = 0 。
提示:
1 <= nums.length <= 104
-1000 <= nums[i] <= 1000
題目要求我們尋找一箇中心點,使得左邊之和與右邊之和相等,其實跟上一題的思路是相似的,也就是求陣列的動態和,要等於總和 total
減去當前的數值 nums[i]
再除以2(因為左右要相等),虛擬碼如下:
# 假設 fn 為陣列的動態和 total == fn[i-1]*2 + nums[i] ? True : False
Python:
class Solution: def pivotIndex(self, nums: List[int]) -> int: total = sum(nums) _sum = 0 for i in range(len(nums)): if total == _sum * 2 + nums[i]: return i _sum += nums[i] return -1
Java:
class Solution { public int pivotIndex(int[] nums) { int total = Arrays.stream(nums).sum(); int sum = 0; for (int i = 0; i < nums.length; ++i) { if (2 * sum + nums[i] == total) { return i; } sum += nums[i]; } return -1; } }
以上就是後端演演算法題解LeetCode字首和範例詳解的詳細內容,更多關於後端演演算法題解LeetCode字首和的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45