华为OD机试题:输出字符串中包含所有整数的最小和
题目描述:
输入字符串s输出s中包含所有整数的最小和 说明:
字符串s只包含az,AZ,+,-, 合法的整数包括正整数,一个或者多个0-9组成,如:0,2,3,002,102 负整数,负号开头,数字部分由一个或者多个0-9组成,如-2,-012,-23,-00023
输入描述:
包含数字的字符串
输出描述:
所有整数的最小和
示例
1.输入:
bb1234aa 输出:10 2.输入:
bb12-34aa 输出:-31 说明:
1+2-(34)=-31
#解题想法:1.单独数字,前面无-,那么就作为个位数相加,如果前面有-,那么就数字尽可能长
使负数越大,和越小;2.另外判断最后位置是否都加了;3.字母或+,直接跳过
#测试用例
#-0023
#-bb-1234aa
#-bb1234aa
#bb12-34aa
#bb12-34aa-2
while 1:
try:
s="-0023"
t=-1
res=0
for i in range(0,len(s)):
if s[i].isalpha() or s[i]=="+":
if t==-1:
continue
else:
if i-t>=2:
res+=int(s[t:i])
t=-1
else:
t=-1
elif s[i].isdigit():
if t==-1:
res += int(s[i])
elif s[i]=="-":
if t==-1:
t=i
else:
if i - t > 1:
res += int(s[t:i])
t = -1
if i==len(s)-1 and t!=-1:
res += int(s[t:])
print(res)
break
except Exception as e:
print(e)
break
