不知不覺中就來到了最後一篇了,終於可以告別一天解一題的壓力了!不過明天預計還是會寫一篇有關完賽後的心得,有興趣的話還是可以看一下喔!
題目說明:給你兩個字串s和t,要你判斷s是否為t的子序列。子串列的定義就是s的每個字母都要包含在t裡面且s的字母出現的順序也要相同;例如"ace"就是"abcde"的子序列但"aec"不是(因為沒有按照順序出現在t裡面)
Case 1:
Input: s = "abc", t = "ahbgdc"
Output: true
Case 2:
Input: s = "axc", t = "ahbgdc"
Output: false
解題思路:建立兩個指標分別從s,t的第0個開始,只要兩者有相同的字母且順序都相同,那麼兩者的的指標都前進一格,如果沒有的話則t的指標往前進一格。最後判斷s的指標是否等於s的長度即可判斷s是否為t的子序列,我們以第一個測資進行說明
s abc i=0
t ahbgdc j=0
step 1:s[0]= t[0], i++, j++. (i,j)=(1,1)
step 2:s[1]!=t[1], j++. (i,j)=(1,2)
step 3:s[1]=t[2], i++, j++. (i,j)=(2,3)
step 4:s[2]!=t[3], j++. (i,j)=(2,4)
step 5:s[2]!=t[4], j++. (i,j)=(2,5)
step 6:s[2]=t[5],i++,j++. (i,j)=(3,6)
i=s.length()=3, true
附上程式碼
Java
class Solution {
public boolean isSubsequence(String s, String t) {
int i=0;
int j=0;
while (i<s.length()&&j<t.length()){
if(s.charAt(i)==t.charAt(j)){
i++;
j++;
}
else{
j++;
}
}
return i==s.length();
}
}
Python
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
i=0
j=0
while i<len(s) and j<len(t):
if s[i]==t[j]:
i+=1
j+=1
else:
j+=1
return i==len(s)