题解 | #判断子序列#
判断子序列
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
