字符串中数字子串求和
程序员文章站
2022-03-11 16:20:01
...
文章目录
字符串中数字子串求和
数字子串求和
【题目】
给定一个字符串s,求其中全部数字串所代表的数字之和。
【要求】
- 忽略小数点字符,例如"A1.3",其中包含两个数字1和3。
- 如果紧贴数字子串的左侧出现字符’-’’,当连续出现的数量为奇数时,则数字视为负,连续出现的数量为偶数时,则数字视为正。例如,“A-1BC–12”,其中包含数字为-1和12。
【举例】
s=“A1.3”,返回4。
s=“A-1BC–12”,返回11。
s=“A1CD2E33”,返回36。
s=“A-1B–2C–D6E”,返回7。
算法思路
考虑逻辑分析能力和边界处理问题。
- 数字子串全为整数;
- 偶数个’-‘为正,奇数个’-'为负;
- 其他字符无特殊含义
res
记录求和结果,num
记录当前整数,flag
记录其符号
遍历字符串s
,数字字符出现时记录当前数至num
,非数字字符出现时累加当前数至res
,根据’-'的个数记录num
的符号
最后一个字符可能是数字,此时刚记录完num
,需再次将num
结果累计至res
,防止遗漏。
时间复杂度为,空间复杂度为
相应代码
# 数字子串求和
def sum_sub_num_str(s):
res = 0 # 求和结果
num = 0 # 当前值
flag = True # 当前值符号
for i in range(len(s)):
c = s[i]
if c >= '0' and c <= '9':
num = num * 10 + ord(c) - ord('0')
else:
if flag is False:
num = -num
res += num
num = 0
if c == '-':
if i - 1 >= 0 and s[i - 1] == '-':
flag = True
else:
flag = False
else:
flag = True
if flag is False:
num = -num
res += num
return res
# 简单测试
if __name__ == '__main__':
print(sum_sub_num_str("A1.3")) # 4
print(sum_sub_num_str("A-1BC--12")) # 11
print(sum_sub_num_str("A1CD2E33")) # 36
print(sum_sub_num_str("A-1B--2C--D6E")) # 7
有任何疑问和建议,欢迎在评论区留言和指正!
感谢您所花费的时间与精力!
推荐阅读
-
php提取csv格式文件中的字符串出现的有关问题及解决方法
-
php根据指定位置和长度获得子字符串的方法
-
JavaScript中操作字符串之localeCompare()方法的使用
-
php中将数组转成字符串并保存到数据库中的函数代码_php技巧
-
企业案例:查找当前目录下所有文件,并把文件中的https://www.cnblogs.com/zhaokang2019/字符串替换成https://www.cnblogs.com/guobaoyan2019/
-
python将字符串插入表中避免单双引号问题
-
PHP utf-8中文截取无乱码(字符串判断版本)
-
,系统的一个php数据对象,var_dump后,属性名居然是字符串类型的数字0()
-
sql话语中能否直接把截取的字符串当作where条件
-
PHP中substr_count()函数获取子字符串出现次数的方法,phpsubstr_count