生活随笔
收集整理的這篇文章主要介紹了
算法(5)-leetcode-explore-learn-数据结构-字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
leetcode-explore-learn-數據結構-數組3-字符串
- 1.簡述
- 2.例題
- 2.1 二進制求和
- 2.2實現strStr()
- 2.3最長公共前綴
本系列博文為leetcode-explore-learn子欄目學習筆記,如有不詳之處,請參考leetcode官網:https://leetcode-cn.com/explore/learn/card/array-and-string/198/introduction-to-array/768/
1.簡述
字符串是字符構成的數組。
字符串一些常用的函數:
(1)比較函數,Python支持云算法重載,可以使用"=="來比較字符串。
(2)可修改性,在Python中字符串是一個不可改寫的數組;一經定義只能訪問字符串中的元素,而不能直接改變某個元素。在C++中字符串是可修改的。
(3)字符串連接,python 中支持兩個字符串直接相加操作進行字符串連接
2.例題
2.1 二進制求和
給一個二進制字符串,返回他們的和,用二進制表示。
基本思想:
兩個字符串諸位相加,設置一個符號位flag用于存儲進位信息
難點邊界條件的確定:char=int(a[i])+int(b[i])+flag,chat的可能取值:0,1,2,3
(1)i=[-1,-2,-l_min]遍歷相加逐個元素至較短字符串遍歷完成
(2) i=[-l_min-1,-l_min-2m,…,-l_max]:char=flag+int(a[i]),char的可能取值:0,1,2
(3)最后還需要檢查是否有進位情況
class Solution(object):def addBinary(self
, a
, b
):""":type a: str:type b: str:rtype: str"""res
=[]l_a
=len(a
)l_b
=len(b
)l_min
=min(l_a
,l_b
)l_max
=max(l_a
,l_b
)flag
=0for i
in range(-1,-l_min
-1,-1):char
=int(a
[i
])+int(b
[i
])+flagflag
=0if char
==0:res
.append
(0)elif char
==1:res
.append
(1)elif char
==2:res
.append
(0)flag
=1else:res
.append
(1)flag
=1print (res
,flag
)if l_a
>l_b
:for i
in range(-l_min
-1,-l_max
-1,-1):char
=flag
+int(a
[i
])flag
=0if char
==0:res
.append
(0)elif char
==1:res
.append
(1)elif char
==2 :res
.append
(0)flag
=1if l_a
<l_b
:for i
in range(-l_min
-1,-l_max
-1,-1):char
=flag
+int(b
[i
])flag
=0if char
==0:res
.append
(0)elif char
==1:res
.append
(1)elif char
==2:res
.append
(0)flag
=1if flag
==1:res
.append
(1)l_res
=len(res
)res_s
=""for i
in range(l_res
-1,-1,-1):res_s
+=str(res
[i
])return res_
2.2實現strStr()
給定一個haystack字符串和一個needle字符串,在haystack字符串中找出needle字符串出現的第一個位置。如果不存在則返回0.
思路,遍歷haystack字符串,找出needle字符串的第一個字符,然后依次往后找,直至所有都匹配上然后返回結果。
注意點:
(1)當needle是空時,如果返回-1(說明在一個字符串中找不到空字符串);如果返回0(說明haysta[0]開始的字符串匹配了空字符串)–c++語言中是這么定義的
(2)兩個都為空時,返回0
(3)len(haystack)<len(needle)直接返回-1
class Solution(object):def strStr(self
, haystack
, needle
):""":type haystack: str:type needle: str:rtype: int"""l_s
=len(haystack
)l_n
=len(needle
)if l_n
==0:return 0if l_s
==0:return -1if l_s
<l_n
:return -1for i
in range(l_s
-l_n
+1): for j
in range(l_n
): if haystack
[i
+j
]!=needle
[j
]:breakif j
==l_n
-1:return i
return -1
2.3最長公共前綴
編寫一個函數來查找字符串數組中的最長公共前綴。
如果公共前綴前綴不存在,返回空字符串""
用一個win區存公用前綴,找最短的字符串,將其元素依次加入win中。判斷剩余字符串是否有該前綴字符。
class Solution(object):def longestCommonPrefix(self
, strs
):""":type strs: List[str]:rtype: str"""n
=len(strs
)if n
==0:return ""short_index
=-1l_min
=float("INF")for i
in range(n
):if len(strs
[i
])<l_min
:l_min
=len(strs
[i
])short_index
=iwin
=""i
=0while(i
<l_min
):win
=strs
[short_index
][:i
+1]for j
in range(n
):if strs
[j
][:i
+1]!=win
:return win
[:i
]i
+=1return win
總結
以上是生活随笔為你收集整理的算法(5)-leetcode-explore-learn-数据结构-字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。