字串打卡[1]
給定一個字串來代表一個學生的出勤記錄,這個記錄僅包含以下三個字元:
‘A’ : Absent,缺勤 ‘L’ : Late,遲到 ‘P’ : Present,到場
如果一個學生的出勤記錄中不超過一個’A’(缺勤)並且不超過兩個連續的’L’(遲到),那麼這個學生會被獎賞。你需要根據這個學生的出勤記錄判斷他是否會被獎賞。
示例 1:
輸入: “PPALLP” 輸出: True
class Solution:
def checkRecord(self, s: str) -> bool:
anum = 0
flag = 0
for i in s:
if i != 'L':
flag = 0
if i == 'A':
anum += 1
else:
if flag>>1:
return False
flag += 1
if anum>>1:
return False
return True
- 單純匹配規則
- 小錯誤: 最後一個anum的判斷應該放在最後或者判斷A的部分,而不是最前。如果放在最前,那麼類似‘‘AA’’這樣的字串就會判斷錯誤。
編寫一個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char[] 的形式給出。
不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列、使用 O(1) 的額外空間解決這一問題。
你可以假設陣列中的所有字元都是 ASCII 碼錶中的可列印字元。
示例 1:
輸入:[“h”,“e”,“l”,“l”,“o”] 輸出:[“o”,“l”,“l”,“e”,“h”]
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
n = len(s)
for i in range(len(s)>>1):
s[i], s[n-i-1] = s[n-i-1], s[i]
- 最簡單的思路,對稱交換
你有一個日誌陣列 logs。每條日誌都是以空格分隔的字串。
對於每條日誌,其第一個字為字母與數字混合的 識別符號 ,除識別符號之外的所有字為這一條日誌的 內容 。
除識別符號之外,所有字均由小寫字母組成的,稱為 字母日誌 除識別符號之外,所有字均由數字組成的,稱為 數字日誌
題目所用資料保證每個日誌在其識別符號後面至少有一個字。請按下述規則將日誌重新排序:
所有 字母日誌 都排在 數字日誌 之前。 字母日誌 在內容不同時,忽略識別符號後,按內容字母順序排序;在內容相同時,按識別符號排序; 數字日誌
應該按原來的順序排列。 返回日誌的最終順序。示例 :
輸入:[“a1 9 2 3 1”,“g1 act car”,“zo4 4 7”,“ab1 off key dog”,“a8 act
zoo”] 輸出:[“g1 act car”,“a8 act zoo”,“ab1 off key dog”,“a1 9 2 3
1”,“zo4 4 7”]
class Solution:
def reorderLogFiles(self, logs: List[str]) -> List[str]:
def rt(log):
id_, content = log.split(' ', 1)
return (0, content, id_) if content[0].isalpha() else (1,)
return sorted(logs, key = rt)
- 主要是學習python內建函式sorted,sort跟sorted的區別是sorted是返回值,不改變原來的list,sort是直接改。
- 同時複習了深淺拷貝
- 直接賦值:拷貝的是物件
# 直接賦值
a = [5]
b = a
a.append(3)
>>> b:[5,3]
# 深淺拷貝
import copy
# 淺拷貝
a = [1,2,[1,2,3]]
b = copy.copy(a)
# or
b = a.copy()
a.append(3)
>>> a: [1,2,[1,2,3],3]
>>> b: [1,2,[1,2,3]]
a[2].append(3)
>>> a: [1,2,[1,2,3,3],3]
>>> b: [1,2,[1,2,3,3]]
# 深拷貝
a = [1,2,[1,2,3]]
b = copy.deepcopy(a)
a.append(3)
a[2].append(3)
>>> a: [1,2,[1,2,3,3],3]
>>> b: [1,2,[1,2,3]]
給定一個由空格分割單詞的句子 S。每個單詞只包含大寫或小寫字母。
我們要將句子轉換為 “Goat Latin”(一種類似於 豬拉丁文 - Pig Latin 的虛構語言)。
山羊拉丁文的規則如下:
如果單詞以母音開頭(a, e, i, o, u),在單詞後新增"ma"。 例如,單詞"apple"變為"applema"。
如果單詞以子音字母開頭(即非母音字母),移除第一個字元並將它放到末尾,之後再新增"ma"。 例如,單詞"goat"變為"oatgma"。
根據單詞在句子中的索引,在單詞最後新增與索引相同數量的字母’a’,索引從1開始。
例如,在第一個單詞後新增"a",在第二個單詞後新增"aa",以此類推。 返回將 S 轉換為山羊拉丁文後的句子。示例 1:
輸入: “I speak Goat Latin” 輸出: “Imaa peaksmaaa oatGmaaaa atinLmaaaaa”
class Solution:
def toGoatLatin(self, S: str) -> str:
slist = S.split(' ')
for i in range(len(slist)):
if slist[i][0].lower() in ['a','e','i','o','u']:
slist[i] += 'ma'+'a'*(i+1)
else:
slist[i] = slist[i][1:]+slist[i][0]+'ma'+'a'*(i+1)
return ' '.join(slist)
- 就根據規則來。
給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。
提示:
num1 和num2 的長度都小於 5100 num1 和num2 都只包含數字 0-9 num1 和num2 都不包含任何前導零
你不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字串轉換為整數形式
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
list1 = list(num1)[::-1]
list2 = list(num2)[::-1]
if len(list1) < len(list2):
list1,list2 = list2,list1
n1 = len(list1)
n2 = len(list2)
tof = 0
listsum = []
for i in range(n2):
tsum = int(list1[i])+int(list2[i])+tof
listsum.append(str(tsum%10))
tof = tsum//10
#print(listsum)
if n1-n2:
for i in range(n2,n1):
tsum = int(list1[i])+tof
listsum.append(str(tsum%10))
tof = tsum//10
if tof:
listsum.append('1')
#print(listsum)
return ''.join(listsum[::-1])
- 先是想去獲得最長的list,然後把剩餘部分直接接到新的list裡面,即listsum,但是這樣會忽略掉進位,比如一個99999+9,前面就是一直要進位的,所以要注意。
- 然後是想要去在range的時候從後往前加,但是有點問題。
相關文章
- 【刷題打卡】day1 - 字串string字串
- day1打卡
- 打卡5
- 打卡7
- 每日打卡
- 樹狀陣列learning Day1識海社群打卡1st陣列
- 3.14打卡
- 3.18打卡
- [打卡]7.7日
- 字串-字元統計1字串字元
- 從零打卡leetcode之day 4--無重複最長字串LeetCode字串
- 字串相關演算法1-字串旋轉字串演算法
- MQTT接收字串(1/2)MQQT字串
- 每日學習打卡
- 6.28打卡
- 6.27打卡
- 3.8打卡
- 5.7打卡
- day26打卡
- day30打卡
- day31打卡
- 3-30打卡
- 從零打卡leetcode之day 1--兩數之和LeetCode
- 字串函式 sha1_file ()字串函式
- 課後作業1:字串加密字串加密
- ruby 字串學習筆記1字串筆記
- java基礎打卡21Java
- 20240429打卡
- 3/8打卡
- 20240325打卡
- 20240328打卡
- 20240403打卡
- 20240513打卡
- 20240517打卡
- [打卡]7月9日
- 20240527打卡
- day10打卡
- day11打卡