LeetCode 字串處理

2021-10-05 03:57:52 字數 3627 閱讀 2884

224.基本計數器實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 ( ,右括號 ),加號 + ,減號 -,非負整數和空格 。

class

solution

res=res+sign*cur;

}else

if(c==

'+')

else

if(c==

'-')

else

if(c==

'(')

else

if(c==

')')

}return res;

}}

227.基本計數器ii實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式僅包含非負整數,+, - ,*,/ 四種運算子和空格 。 整數除法僅保留整數部分。

class

solution

if(c<

'0'&&c!=

' '||i==s.

length()

-1)else

if(sign==

'-')

else

if(sign==

'*')

else

if(sign==

'/')

num=0;

sign=c;}}

int res=0;

while

(!stack.

isempty()

)return res;

}}

基本計數器完整體(左括號 ( ,右括號 ),+, - ,*,/ 四種運算子和空格 )

class

solution

private int dfs

(string s, int[

] i)

if(character.

isdigit

(ch)

)//不是數字,不是空格(運算子 或 '(' 或 ')' ) 或者 到了最後乙個字元,那麼根據前面記錄的 op 操作符 將數字壓棧,然後將新的運算子 ch 賦值給 opif(

!character.

isdigit

(ch)

&& ch !=

' '|| i[0]

== s.

length()

-1) num =0;

op = ch;}/*

遇到右括號,退出迴圈,然後計算結果, 返回上一層 dfs

這一步寫在最後是因為,當 ch 為 右括號 時,那麼我們需要先將前面已經得到的 num 壓入棧中,再退出迴圈

*/if(ch ==

')')

} int res =0;

while

(!stack.

isempty()

)return res;

}}

150.逆波蘭表示式求值有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。

class

solution

else

if(s.

equals

("-"))

else

if(s.

equals

("*"))

else

if(s.

equals

("/"))

else

}return stack.

pop();

}}

282.給表示式新增運算子給定乙個僅包含數字 0-9 的字串和乙個目標值,在數字之間新增二元運算子(不是一元)+、- 或 * ,返回所有能夠得到目標值的表示式。

class

solution

public

void

dfs(string num,int target,list temp,long prenum,long curnum,long value,int index)

return;}

curnum=curnum*10+

(num.

charat

(index)

-'0');

string curnum_str=long.

tostring

(curnum);if

(curnum>0)

temp.

add(

"+")

; temp.

add(curnum_str)

;dfs

(num,target,temp,curnum,

0,value+curnum,index+1)

; temp.

remove

(temp.

size()

-1);

temp.

remove

(temp.

size()

-1);

if(temp.

size()

>0)

}}

494.目標和給定乙個非負整數陣列,a1, a2, …, an, 和乙個目標數,s。現在你有兩個符號 + 和 -。對於陣列中的任意乙個整數,你都可以從 + 或 -中選擇乙個符號新增在前面。返回可以使最終陣列和為目標數 s 的所有新增符號的方法數。

//0-1揹包法

class

solution

}return dp[v]

;}}

241.為運算表示式設計優先順序給定乙個含有數字和運算子的字串,為表示式新增括號,改變其運算優先順序以求出不同的結果。你需要給出所有可能的組合的結果。有效的運算符號包含 +, - 以及 * 。

class

solution

//如果已經有當前解了,直接返回

if(map.

containskey

(input)

) list result =

newarraylist

<

>()

; int num =0;

int index =0;

while

(index < input.

length()

&&!isoperation

(input.

charat

(index)))

if(index == input.

length()

)for

(int i =

0; i < input.

length()

; i++)}

}}//存到 map

map.

put(input, result)

;return result;

}private int caculate

(int num1, char c, int num2)

return-1

;}private boolean isoperation

(char c)

}

LeetCode 單詞子集(字串處理)

我們給出兩個單詞陣列 a 和 b。每個單詞都是一串小寫字母。現在,如果 b 中的每個字母都出現在 a 中,包括重複出現的字母,那麼稱單詞 b 是單詞 a 的子集。例如,wrr 是 warrior 的子集,但不是 world 的子集。如果對 b 中的每乙個單詞 b,b 都是 a 的子集,那麼我們稱 a...

滑動視窗處理字串 LeetCode

給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。一開始的思路是這樣 因為使用list的ind...

LeetCode 字串 反轉字串

反轉字串 編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列char的形式給出。不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列 使用 o 1 的額外空間解決這一問題。你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。示例 1 輸入 h e l l o 輸出 o l ...