字串中數字子串求和

2021-10-03 04:22:44 字數 1940 閱讀 7875

【題目】

給定乙個字串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,防止遺漏。

時間複雜度為o(n

)o(n)

o(n)

,空間複雜度為o(1

)o(1)

o(1)

# 數字子串求和

defsum_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 =

0if c ==

'-':

if i -

1>=

0and 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"))

# 4print

(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

字串 字串中數字子串的求和

題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3.如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字 1和12。舉例 str a...

字串中數字子串的求和

題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求 忽略小數點字元,如 a1.3 其中包含兩個數字1和3 如果緊貼數字子川的左側出現字元 當連續出現的數量為奇數時,則數字視為負,偶數時,則數字視為正。如 a 1bc 12 其中包含數字為 1和12。舉例 str a1cd2e33 返回3...

字串中數字子串求和問題

輸入 ab34c57ddo 輸出 91 輸入 1ab 2c78 輸出 79 說明 奇數個 表示負號,偶數個 表示正號 下面這個思路又麻煩又複雜,還只能實現正號的操作,愚蠢至極,記錄一下豈不也快哉 下面這個方法將字串遍歷一次,將找到連續的數字字串存放到vectorsub中,然後再將所有的sub存放到v...