日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

      歡迎訪問 生活随笔!

      生活随笔

      當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

      编程问答

      算法(5)-leetcode-explore-learn-数据结构-字符串

      發布時間:2023/12/13 编程问答 21 豆豆
      生活随笔 收集整理的這篇文章主要介紹了 算法(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):#print(i,res,flag)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:#print(l_min,l_max)for i in range(-l_min-1,-l_max-1,-1):#print(i,flag,res)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=1#print(res,flag)if 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): # i:[0,1,...,l_s-l-n]for j in range(l_n): # i:[0,1,...,l_n-1]l-s-l_n#print(i,j)if haystack[i+j]!=needle[j]:breakif j==l_n-1:return ireturn -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-数据结构-字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

      如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。