
思路: recursion,two pointer。我自己是用recursion写的,后来经人指点后知道了two pointer这个方法(好像挺常用的,课后要多研究下这个方法)。然后我看了标答,发现标答也有two pointer。这可见two pointer的重要性。看了标答two pointer之后我发现其实和我的recursion思路是一样的,只是他用了two pointer,这个方法呢可以decrease space complexity,而且可以使代码more readable。所以我觉得就这题来说还是two pointer解法来的更好。至少不用和recursion一样去想那么多base case。下面我就先展示一下two pointer代码,再展示我的recursion代码。
// two pointer
class Solution {
public boolean isSubsequence(String s, String t) {
int pLeft, pRight;
for(pLeft = 0,pRight = 0; pRight < t.length()&&pLeft < s.length();){
if(s.charAt(pLeft) == t.charAt(pRight)){
pLeft++;
}
pRight++;
}
return pLeft == s.length();
}
}
// recursion
class Solution {
public boolean isSubsequence(String s, String t) {
if(s.length() == 1){return t.contains(s);}
if(s.length() == 0){return true;}
if(s.length() > t.length()){return false;}
StringBuilder sb = new StringBuilder(t);
for(int i = 0; i < sb.length(); i++){
if(t.contains(Character.toString(s.charAt(0))))
{
return isSubsequence(s.substring(1),sb.substring(sb.indexOf(Character.toString(s.charAt(0))) + 1));
}
}
return false;
}
}
总结:
- two pointer 算法!
本文探讨了两种解决子序列判断问题的方法:递归与双指针算法。通过对这两种方法的对比,文章详细解释了双指针算法如何在减少空间复杂度的同时提高代码可读性。通过实例代码展示了双指针方法的具体实现。
513

被折叠的 条评论
为什么被折叠?



