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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c语言如何判断是否是子序列,leetcode392(判断子序列)--C语言实现

發布時間:2025/3/8 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言如何判断是否是子序列,leetcode392(判断子序列)--C语言实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

求:

給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。

你可以認為 s 和 t 中僅包含英文小寫字母。字符串 t 可能會很長(長度 ~= 500,000),而 s 是個短字符串(長度 <=100)。

字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,"ace"是"abcde"的一個子序列,而"aec"不是)。

示例?1:

s = "abc", t = "ahbgdc"

返回?true.

示例?2:

s = "axc", t = "ahbgdc"

返回?false.

解:

1、雙指針

利用2個指針分別遍歷字符串s和字符串t,直到某個字符串遍歷完成。使用一個遍歷findCount來記錄匹配字符數,findCount初始化為0,遍歷過程中如果發現字符匹配,findCount加1。退出時判斷findCount是否與字符串s的長度相等,相等說明是子串,否則不是子串。

時間復雜度:O(M+N),M為字符串s長度,N為字符串t長度,因為N遠大于M,可以近似為O(N)

空間復雜度:O(1)

bool isSubsequence(char* s, char* t){

inti,j;intfindCount = 0;for(i=0,j=0;i

if(s[i]==t[j]){

++i;++findCount;}

}

returnfindCount == strlen(s);}

2、雙指針優化

不計算字符串s和字符串t的長度,直接比。退出的條件是字符串s或字符串t遍歷完成。

時間復雜度:O(M+N),M為字符串s長度,N為字符串t長度,因為N遠大于M,可以近似為O(N)

空間復雜度:O(1)

bool isSubsequence(char* s, char* t){

while(1){

if(!*s) return true;if(!*t) return false;if(*t++ == *s) s++;}

}

3、動態規劃

參考官方題解。

總結

以上是生活随笔為你收集整理的c语言如何判断是否是子序列,leetcode392(判断子序列)--C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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