题解 | #判断子序列#
判断子序列
https://www.nowcoder.com/practice/39be6c2d0a9b4c30a7b04053d5960a84
判断子序列
解题思路
双指针操作
''' 思路:双指针操作 1. 首先判断子串S的长度是否大于原串T的长度,若是则无法匹配,直接返回False。 2. 重点:双指针操作。定义一个变量match_s表示匹配到的字符,一个变量ind_S表示子串S的当前索引。然后遍历原串T中的每一个字符,如果该字符与子串S当前索引指向的字符相同,则将该字符加入match_s中,并将ind_S加一。 3. 最后判断match_s是否等于子串S,若是则匹配成功,返回True,否则返回False。 ''' class Solution: def isSubsequence(self , S: str, T: str) -> bool: # write code here if len(S) > len(T): return False match_s = '' # 匹配到的字符 ind_S = 0 # 子串S的索引 for j in T: if j == S[ind_S]: match_s += j ind_S += 1 if match_s == S: return True return False
判断字符串子序列-华为OD机试 2022
- 这里有两个abc的子序列满足,取下标较大的,故返回3
解题思路
双指针。如果匹配完一个子串,在循环T中继续重新匹配S,此时S的索引置为0.
python代码
class Solution: def isSubsequence(self , S: str, T: str) -> bool: # write code here last_ind = -1 # 匹配最后一个子串的首字母在T中的索引 match_s = '' # 匹配到的字符 ind_S = 0 # 子串S的索引 flag = 0 for j in range(len(T)): if T[j] == S[ind_S]: if flag == 0: # 只有首字母才会保存索引j last_ind = j flag = 1 # 其他时候置为1 match_s += T[j] ind_S += 1 if match_s == S: flag = 0 # 首字母标志 ind_S = 0 # 匹配完成一个子串,将子串索引置为0,重新匹配 return last_ind