Day11 栈与队列part2
我的思路:
用的Arraylist写的,需要注意弹出元素时,是取lastIndexof
解答:
class Solution {
public boolean isValid(String s) {
char[] ch = s.toCharArray();
List list = new ArrayList();
for(int i = 0; i < ch.length; i++) {
if(ch[i] == '(' || ch[i] == '{' || ch[i] == '[') {
if(ch[i] == '(') {
list.add(')');
}
if(ch[i] == '{') {
list.add('}');
}
if(ch[i] == '[') {
list.add(']');
}
}
else {
if(list.size() == 0 || (Character)list.get(list.size() - 1) != ch[i]) {
return false;
}
else {
// list.remove(list.lastIndexOf((Character) ch[i]));
list.remove(list.size() - 1);
}
}
}
if(list.size() != 0) {
return false;
}
return true;
}
}
我的思路:
还是用的ArrayList写的,需要注意最后要将list转回成string
解答:
class Solution {
public String listToString(List list) {
StringBuffer sB = new StringBuffer();
for(int i = 0; i < list.size(); i++) {
sB.append((Character)list.get(i));
}
return new String(sB);
}
public String removeDuplicates(String s) {
char[] ch = s.toCharArray();
List list = new ArrayList();
for(int i = 0; i < ch.length; i++) {
char c = ch[i];
if(list.contains(c) && ch[i] == (Character)list.get(list.size() - 1)) {
list.remove(list.size() - 1);
}
else {
list.add(c);
}
}
String s1 = listToString(list);
return s1;
}
}
我的思路:
看了逆波兰表达式的表示再写的题
今天3题都是用的ArrayList,后面要学着用stack和deque
解答:
class Solution {
public int evalRPN(String[] tokens) {
List list = new ArrayList();
for(int i = 0; i < tokens.length; i++) {
if(tokens[i].equals("*") || tokens[i].equals("/")
|| tokens[i].equals("+") || tokens[i].equals("-")) {
if (list.size() >= 2) {
Integer i1 = (Integer) list.remove(list.size() - 1);
Integer i2 = (Integer) list.remove(list.size() - 1);
if (tokens[i].equals("*")) {
int ans = i2 * i1;
list.add(ans);
}
if (tokens[i].equals("/")) {
int ans = i2 / i1;
list.add(ans);
}
if (tokens[i].equals("+")) {
int ans = i2 + i1;
list.add(ans);
}
if (tokens[i].equals("-")) {
int ans = i2 - i1;
list.add(ans);
}
}
}
else {
list.add(Integer.parseInt(tokens[i]));
}
}
return (Integer)list.get(0);
}
}