题目
解题
刷LeetCode也有几个境界:
- 提交的解法能 通过
- 评估效率,思考是否有更优的方案
- 看看题目提示,再找一找思路
- 看懂官方解题和其他人的解题方案
- 看懂后能依据思路,把代码敲出来
- 间隔一段时间后,依旧能想到思路和写出代码
- 遇到同样解法的题目,能够想到方法并做出
我相信,如果能把每步做好,刷题的数量可能比一味地追求提交能通过再读一读别人的解法来得少,但是质量会很高。所以,每次读完代码后,我都坚持自己敲一遍,把思路总结在CSDN上,也借此机会梳理一下逻辑。今天还是给自己打打气:注重质量,不搞题海战术!
接下来要改变一个不好的习惯:不要每次写完直接运行,应该自己脑海里跑一遍检查一下逻辑,而且要多想想测试用例,边界情况有没有包含在内?
解题一
# python
class Solution:
def compressString(self, S: str) -> str:
ans = ""
count = 0
for i in range(0, len(S)):
count += 1
if i + 1 >= len(S) or S[i + 1] != S[i]:
ans = ans + S[i] + str(count)
count = 0
return ans if len(ans) < len(S) else S
// javascript
var compressString = function(S) {
let compressStrArr = [];
let count = 0;
for (let i = 0; i < S.length; i++) {
count++;
if (i === S.length - 1 || S[i] !== S[i + 1]) {
compressStrArr.push(S[i], count);
count = 0;
}
}
if (compressStrArr.length < S.length) {
return compressStrArr.join("");
}
return S;
};
解题二
# python
class Solution:
def compressStrLen(self, S: str) -> str:
compressLen = 0
for i in range(0, len(S)):
if i + 1 >= len(S) or S[i + 1] != S[i]:
compressLen += 2 # 是2
return compressLen >= len(S)
def compressString(self, S: str) -> str:
if self.compressStrLen(S):
return S
ans = ""
count = 0
for i in range(0, len(S)):
count += 1
if i + 1 >= len(S) or S[i + 1] != S[i]:
ans = ans + S[i] + str(count)
count = 0
return ans