iT邦幫忙

2022 iThome 鐵人賽

DAY 30
0

不知不覺中就來到了最後一篇了,終於可以告別一天解一題的壓力了!不過明天預計還是會寫一篇有關完賽後的心得,有興趣的話還是可以看一下喔!

題目說明:給你兩個字串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)

上一篇
Day 29 Find First and Last Position of Element in Sorted Array
下一篇
Day 31 完賽心得以及雜談
系列文
從leetcode學習資料結構和演算法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言