题目
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和tif(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()