1.用栈操作构建数组
//给你一个目标数组 target 和一个整数 n。每次迭代,需要从 list = {1,2,3..., n} 中依序读取一个数字。 // // 请使用下述操作来构建目标数组 target : // // // Push:从 list 中读取一个新元素, 并将其推入数组中。 // Pop:删除数组中的最后一个元素。 // 如果目标数组构建完成,就停止读取更多元素。 // // // 题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。 // // 请返回构建目标数组所用的操作序列。 // // 题目数据保证答案是唯一的。 // // // // 示例 1: // // //输入:target = [1,3], n = 3 //输出:["Push","Push","Pop","Push"] //解释: //读取 1 并自动推入数组 -> [1] //读取 2 并自动推入数组,然后删除它 -> [1] //读取 3 并自动推入数组 -> [1,3] // // // 示例 2: // // //输入:target = [1,2,3], n = 3 //输出:["Push","Push","Push"] // // // 示例 3: // // //输入:target = [1,2], n = 4 //输出:["Push","Push"] //解释:只需要读取前 2 个数字就可以停止。 // // // 示例 4: // // //输入:target = [2,3,4], n = 4 //输出:["Push","Pop","Push","Push","Push"] // // // // // 提示: // // // 1 <= target.length <= 100 // 1 <= target[i] <= 100 // 1 <= n <= 100 // target 是严格递增的 // // Related Topics 栈
public List<String> buildArray(int[] target, int n) {
Deque<Integer> deque = new LinkedList<Integer>();
List<String> list = new ArrayList<>();
int j = 0;
for (int i = 1; i <= n; i++) {
deque.push(i);
list.add("Push");
if(target[j] != i){
deque.pop();
list.add("Pop");
}else {
j++;
}
if(j==target.length){
break;
}
}
return list;
}
2.整理字符串
//给你一个由大小写英文字母组成的字符串 s 。 // // 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: // // // 若 s[i] 是小写字符,则 s[i+1] 不可以是相同的大写字符。 // 若 s[i] 是大写字符,则 s[i+1] 不可以是相同的小写字符。 // // // 请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。 // // 请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。 // // 注意:空字符串也属于整理好的字符串,尽管其中没有任何字符。 // // // // 示例 1: // // //输入:s = "leEeetcode" //输出:"leetcode" //解释:无论你第一次选的是 i = 1 还是 i = 2,都会使 "leEeetcode" 缩减为 "leetcode" 。 // // // 示例 2: // // //输入:s = "abBAcC" //输出:"" //解释:存在多种不同情况,但所有的情况都会导致相同的结果。例如: //"abBAcC" --> "aAcC" --> "cC" --> "" //"abBAcC" --> "abBA" --> "aA" --> "" // // // 示例 3: // // //输入:s = "s" //输出:"s" // // // // // 提示: // // // 1 <= s.length <= 100 // s 只包含小写和大写英文字母 // // Related Topics 栈 字符串
public String makeGood(String s) {
Deque<Character> deque = new LinkedList();
String res = "";
deque.push(s.charAt(0));
if(s.length()==1){
return s;
}
for (int i = 1; i < s.length(); i++) {
//if(deque.size()>0 && s.charAt(i) == caps(deque.peek())){
if(deque.size()>0 && (s.charAt(i) ^ deque.peek()) == 32){
deque.pop();
}else {
deque.push(s.charAt(i));
}
}
while(!deque.isEmpty()){
res += deque.pop();
}
String reverse = new StringBuffer(res).reverse().toString();
return reverse;
}
Character caps(Character c){
if(Character.isLowerCase(c)){
return Character.toUpperCase(c);
}else{
return Character.toLowerCase(c);
}
}