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

2021-08-06 08:07:33 字數 1540 閱讀 3732

【題目】

給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下:

忽略小數點字元,例如「a1.3」,其中包含兩個數字1和3.

如果緊貼數字子串的左側出現字元「-」,當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,「a-1bc- -12」,其中包含數字-1和12。

【舉例】

str = 「a1cd2e33」返回36.

str = 「a-1b- -2c- -d6e」,返回7。

【基本思路】

使用三個變數。res,num和posi。res表示目前的累加和,num表示當前收集到的數字,posi表示數字num是正數還是負數,true表示正數,初始時res = 0, num = 0, posi = true。

從左到右依次遍歷字串,假設遍歷到的字元為char。情況分析如下:

1)如果char是 『0』 ~ 『9』,假設之前收集的數字為num,則可以根據posi更新num的值,如果posi == true,則num = num×10 + (char - 『0』),否則num = num×10 - (char - 『0』)。posi的更新方法之後解釋。

2)如果char不是 『0』 ~ 『9』,則說明num已經是乙個完整的數字了,該累加到res了,所以res += num,然後令num = 0。累加完後觀察此時char的值,如果此時的字元不是「-」,則令posi = true,如果此時的字元為「-」,判斷前乙個字元是否也是「-」,如果是的話,令 posi = !posi,否則令posi = false。

既然我們把累加的時機放在了char不是數字字元的時候,那麼如果str是以數字字元結尾的,那麼就會出現最後乙個字元沒有累加的情況。所以遍歷完成後,還要再加一次num。

下面是使用python3.5實現的**

#字串中數字子串的求和

defnumsum

(str1):

if str1 == none

or len(str1) == 0:

return

0 res = 0

num = 0

cur = 0

posi = true

for i in range(len(str1)):

cur = ord(str1[i]) - ord('0')

if cur < 0

or cur > 9:

res += num

num = 0

if str1[i] == '-':

if i - 1 >= 0

and str1[i-1] == '-':

posi = not posi

else:

posi = false

else:

pose = true

else:

num = num * 10 + cur if posi else -cur

res += num

return res

字串問題 字串的統計字串

題目 給定乙個字串str,返回str的統計字串。例如,aaabbadddffc 的統計字串為 a 3 b 2 1 d 3 f 2 c 1 補充題目 給定乙個字串的統計字串cstr,再給定乙個整數index,返回cstr所代表的原始字串上第index個字元。例如,a 1 b 100 所代表的原始字串上...

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

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

字串問題之 字串中的數字子串求和

要求 1 忽略小數點 如 a1.3 包含的是兩個數字 1 和 3 2 緊貼數字子串的左側出現字元 連續次數為奇數時候 為負數 偶數時候為正數。比如 a 1bc 12 其中包含數字為 1 和 12 str a1cd2e33 返回36 str a 1b 2c d6e 返回7 這個題目的實現方法有很多種,...