leetcode-551-Student Attendance Record I(判断是否出现连续几个相同字符)
題目描述:
You are given a string representing an attendance record for a student. The record only contains the following three characters:
A student could be rewarded if his attendance record doesn't contain?more than one 'A' (absent)?or?more than two continuous 'L' (late).
You need to return whether the student could be rewarded according to his attendance record.
Example 1:
Input: "PPALLP" Output: True?
Example 2:
Input: "PPALLL" Output: False?
要完成的函數(shù):
bool checkRecord(string s)
?
說(shuō)明:
1、這道題給定一個(gè)字符串,其中只有三種字符P/L/A,分別代表在場(chǎng)/遲到/缺席。如果一個(gè)學(xué)生出現(xiàn)了一次以上的缺席,或者連續(xù)兩次以上的遲到,那么他就不能被獎(jiǎng)勵(lì)。要求判斷是否某個(gè)學(xué)生能被獎(jiǎng)勵(lì)。
2、關(guān)于A的,很容易,遍歷一遍字符串統(tǒng)計(jì)A出現(xiàn)次數(shù),當(dāng)次數(shù)大于1時(shí),返回false,結(jié)束遍歷。
關(guān)于L的,也不難,遍歷一遍字符串,當(dāng)碰到L時(shí),判斷下一個(gè)字符和再下一個(gè)字符是否均為L(zhǎng),如果滿足,返回false,結(jié)束遍歷(這里要注意邊界條件,即下一個(gè)字符是否在字符串以內(nèi));如果不滿足,那么繼續(xù)處理下一個(gè)字符。
代碼如下:
bool checkRecord(string s) {int counta=0,countl=0;int s1=s.size();for(int i=0;i<s1;i++){if(s[i]=='A'){counta++;if(counta>1)return false;}else if(s[i+2]=='L'&&s[i+1]=='L'&&s[i]=='L'){if(i+2<s1)return false;}}return true;}上述代碼實(shí)測(cè)6ms,beats 70.11% of cpp submissions。
?
3、另一種方法
參考了討論區(qū)的代碼實(shí)現(xiàn),發(fā)現(xiàn)了另一種實(shí)際花費(fèi)時(shí)間更少的方法。
代碼同樣分享給大家,如下:
bool checkRecord(string s) {int counta=0,countl=0;for(int i = 0;i < s.size();i++){if(s[i]=='A'){counta++;countl=0;//清空countl,重新開(kāi)始if(counta>1)return false;}else if(s[i]=='L'){countl++;if(countl>2)return false;} else countl=0;}return true;}上述代碼實(shí)測(cè)4ms,beats 100% of cpp submissions。
這樣寫代碼看起來(lái)更加“清爽”,判斷是否出現(xiàn)了連續(xù)的幾個(gè)相同字符,采用的是碰到其他字符就“清空”的方法。
而2中的方法,是碰到‘L’時(shí)繼續(xù)判斷下一個(gè)以及再下一個(gè)字符是否仍是'L'的方式,這種方法不需要引進(jìn)countl的頻繁計(jì)算。
筆者還是更加喜歡“清爽”的代碼,當(dāng)L出現(xiàn)幾百次才要return false的時(shí)候,明顯清爽代碼更省時(shí)間。
這道題目給予的啟示是:當(dāng)要判斷字符是否連續(xù)出現(xiàn)時(shí),可以采用“清空”的方法來(lái)做。
轉(zhuǎn)載于:https://www.cnblogs.com/chenjx85/p/8984985.html
總結(jié)
以上是生活随笔為你收集整理的leetcode-551-Student Attendance Record I(判断是否出现连续几个相同字符)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: KEIL4破解
- 下一篇: java 反射 成员变量_java基础-