最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
提示:
1 <= s.length <= 104s仅有英文字母和空格' '组成s中至少存在一个单词
思考:
唔,如果能够倒着找,找到非空格以及遇到下一个空格之间的字符数。如果正着找的话,那就可以记录一个数字列表,然后把最后一个数字拉出来,或者设置一个变量,记录下这个数字然后不断更新最后输出。这样来看只用循环一遍即可。似乎没有更好的解法了……
class Solution:
def lengthOfLastWord(self, s: str) -> int:
k = 0
num = 0
for i in range(0,len(s)):
if s[i]!=" ":
k = k+1
if k!=0 and s[i]==" ":
num = k
k = 0
if k!=0 and i+1 == len(s):
num = k
return num
# 或者就是反向遍历
class Solution:
def lengthOfLastWord(self, s: str) -> int:
i = len(s) - 1
# 先把末尾的空格跳过去
while i >= 0 and s[i] == " ":
i -= 1
# 开始计数
length = 0
while i >= 0 and s[i] != " ":
length += 1
i -= 1
return length
加一
给定一个表示 大整数 的整数数组 digits,其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0。将大整数加 1,并返回结果的数字数组。
提示:
1 <= digits.length <= 1000 <= digits[i] <= 9digits不包含任何前导0。
思考:
多数情况下还要,末尾数字加一,不过得考虑特殊情况,比如进位以及导致的位数变化。直接定位到最后一个数字,如果是9那么就往前找非9数字,如果没有,那么就是[1]+[0]*len(digits),如果找到了非9的数字,那么就是这个数字加一,后面全是[0]。
代码:
class Solution1:
def plusOne(self, digits: List[int]) -> List[int]:
i = length = len(digits)-1
while digits[i] == 9:
i -= 1
if i == -1:
return [1]+[0]*(length+1)
digits[i] += 1
digits[i+1:length+1] = [0]*(length - i)
return digits
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
for i in range(len(digits)-1, -1, -1):
if digits[i] < 9:
digits[i] += 1
return digits
digits[i] = 0
return [1] + digits