题目
228. 汇总区间
思路
用双指针解决,left指向有序区间的起点,right指向有序区间的终点+1,判断right指向的区间是否有序则根据nums[right] = right - left +nums[left];
代码
public List<String> summaryRanges(int[] nums) {
// 双指针
List<String> re = new ArrayList<>();
if(nums.length == 0){
return re;
}
int left = 0;
int right = 0;
while(right < nums.length){
if(left == right || nums[right] == nums[left] + right - left){
right ++;
}
else{
// right-left <= 1 即表示当前连续有序区间只有一个数
String temp = right - left <= 1? String.valueOf(nums[left]):String.valueOf(nums[left]) + "->" + String.valueOf(nums[right-1]);
re.add(temp);
left = right++;
}
}
// 记录跳出循环的最后一个子区间
String temp = right - left <= 1? String.valueOf(nums[left]):String.valueOf(nums[left]) + "->" + String.valueOf(nums[right-1]);
re.add(temp);
return re;
}
题目
392. 判断子序列
思路
使用双指针分别指向子序列和原序列,只有当原序列与子序列的字符相等时,两个指针往后移;否则值将原序列指针往后移,知道遍历完原序列的所有字符串;
代码
public boolean isSubsequence(String s, String t) {
// 使用双指针分别指向s和t
if(s.isEmpty()){
return true;
}
int sp = 0;
int tp = 0;
while(tp < t.length()){
if(t.charAt(tp) == s.charAt(sp)){
// 相等时 继续往后走一个位置继续判断
sp ++;
if(sp == s.length()){
return true;
}
}
tp ++;
}
return false;
}
Tips
字符串的长度是s.length(),判断字符串为空s.isEmpty()