双指针合集
推荐题目
844. 比较含退格的字符串
977. 有序数组的平方
双指针进行交换
对应的题目977. 有序数组的平方
因为题目已经要求是非递减顺序 则表示必须是进行递增 但是可以存在相等的情况
唯一能改变的就是 负数的特殊性 平方之后 其大小就会发生变换 但是 即便这样 在数组中也是存在于两侧的位置
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
class Solution {
public int[] sortedSquares(int[] nums) {
int l=0;
int r=nums.length-1;
int[] ans= new int[nums.length];
int temp=r;
while(l<=r){
if(nums[l]*nums[l]<nums[r]*nums[r]){
ans[temp--]=nums[r]*nums[r];
r--;
}else{
ans[temp--]=nums[l]*nums[l];
l++;
}
}
return ans;
}
}
对应的题目844. 比较含退格的字符串
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
第一种使用栈
class Solution {
public boolean backspaceCompare(String s, String t) {
return ToReal(s).equals(ToReal(t));
}
public String ToReal(String str){
Stack<Character> stock = new Stack<Character>();
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='#'){
if(!stock.isEmpty()){
stock.pop();
}
}else{
stock.push(str.charAt(i));
}
}
StringBuilder Strings = new StringBuilder();
while(!stock.isEmpty()){
Strings.append(stock.pop());
}
return Strings.toString();
}
}
第二种双指针
主要就是通过双指针 进行对应的判断 设置快慢指针 当快指针当前位置的值是# 慢指针进行做移 当快指针是指向的是正常值的时候 就对进行更新
class Solution {
public boolean backspaceCompare(String s, String t) {
return toReal(s).equals(toReal(t));
}
public String toReal(String str){
char[] ch = str.toCharArray();
int index=0;
for(int i=0;i<ch.length;i++){
if(ch[i]=='#'){
index--;
if(index<0){
index=0;
}
}else{
ch[index++]=ch[i];
}
}
return String.valueOf(ch,0,index);
}
}