26 删除排序数组中的重复项
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()==0) return 0;
int i=0;
for(int j=1;j<nums.size();j++)
{
if(nums[i]!=nums[j])
{
nums[i+1]=nums[j];
i++;
}
}
return i+1;
}
};
使用双指针的做法,删除排序数组中的重复项其实就是找出排序数组中的非重复项,两个指针,j负责向后找下一个非重复数,找到以后放在i的位置上。
- 注意leetcode上经常需要判断输入的是空数组的话咋办。
392 判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"
是"abcde"
的一个子序列,而"aec"
不是)。
class Solution {
public:
bool isSubsequence(string s, string t) {
if(s.size()==0) return 1;
if(t.size()==0) return 0;
int i=0;
for(int j=0;j<t.size();j++)
{
if(s[i]==t[j])
i++;
}
if(i==s.size()) return 1;
return 0;
}
};
双指针 : i慢指针,j快指针