劍指offer刷題記錄 字串

2021-10-02 19:25:14 字數 1688 閱讀 4595

請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100",「5e2」,"-123",「3.1416"和」-1e-16"都表示數值。 但是"12e",「1a3.14」,「1.2.3」,"±5"和"12e+4.3"都不是。

寫到一半,**崩了,還沒儲存,心態崩了,從頭再來。

其實劍指offer裡幾個字串的題目無非就是理清題意,考慮各種情況,遍歷後if、else即可。此題也不例外。

bool

isnumeric

(char

* str)

else

if(str[i]

=='+'

||str[i]

=='-'

)else

if(str[i]

=='.'

)elseif(

'0'>str[i]

||str[i]

>

'9')

return

false;}

return

true

;}

剛開始想著從頭遍歷陣列,遇到空格進行修改。但是這樣子遍歷的話一遇到空格,後面的所有元素都得修改移位,這個過程過於冗餘。

如果是從後遍歷的話,只需提前記錄空格的數目,每個元素前的空格數都是既定的,由此就可以計算更改過後元素所在的最終位置,修改一次即可。

class

solution

for(

int i=length-

1;i>=

0;i--

)else}}

};

請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第乙個只出現一次的字元是"g"。當從該字元流中讀出前六個字元「google"時,第乙個只出現一次的字元是"l"。

其實只要在構建字串的過程中維護乙個雜湊表,然後遍歷字串對照雜湊表即可。

public

://insert one char from stringstream

string s;

int hash[

256]=;

void

insert

(char ch)

char()

return

'#';

}

請實現乙個函式用來匹配包括』.『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配

這個題目比較繁瑣,理解起來也比較困難。正常匹配的情況就不說了,比較麻煩的是下個字元為 』 * 』 的時候。

如果當前字元匹配的話,則有三種情況:

字串移動一位,pattern不動,是否匹配

或字串移動一位,跳過當前 』 * 』 的符號,是否匹配

或字串不移動,跳過當前 』 * 』 的符號,是否匹配

上述過程需要自己琢磨琢磨便能理解,字元不匹配的情況就好辦了,跳過當前 』 * 』 的符號,再看是否匹配。理解了這個過程也是if、else就可以搞定了。

class

solution

else}}

;

劍指 offer 刷題記錄

任誰都躲不過找工作的問題,好希望能多準備一些時間,奈何時間不等人,每天刷幾道題,並且記錄下來吧 def replacespace s write code here num space 0 new s for i in range len s if i num space 1 for i in ra...

劍指offer刷題記錄

遞迴法 鍊錶的後續遍歷,並用self.k來記錄倒數節點的位置,找到了就返回找到的節點,否則返回none coding utf 8 class listnode def init self,x self.val x self.next none class solution def init self...

劍指offer刷題記錄 綜合

將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 輸入描述 輸入乙個字串,包括數字字母符號,可以為空 輸出描述 如果是合法的數值表達則返回該數字,否則返回0 做這個題目做的真的很煩,最麻煩的就是判斷當前是否越界。可儲存的最大的正數末位為7,可儲存...