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语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 情人节如何送礼有新意 华为小折叠为浪漫加
- 下一篇: 比尔·盖茨新女友首度曝光 身份竟是前甲骨