1.Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Input: "()"
Output: true
Input: "([)]"
Output: false
Input: "{[]}"
Output: true
复制代码
class Solution {
public boolean isValid(String s) {
if(s==null || s.length()%2!=0){
return false;
}
String r = "";
for(int i=0;i<s.length();i++){
char curr = s.charAt(i);
//检查当前位置字符是 括号的开头还是结尾
if(curr == ')' || curr == ']' || curr == '}'){
//如果当前位置字符是 括号的结尾
//检查拼接的字符串的上一个字符是否可对应消除
if(r == ""){
//如果拼接的字符串为空:错
return false;
}else if(curr == ')'&&r.charAt(r.length()-1)=='('){
r = r.substring(0,r.length()-1);
}else if(curr == ']'&&r.charAt(r.length()-1)=='['){
r = r.substring(0,r.length()-1);
}else if(curr == '}'&&r.charAt(r.length()-1)=='{'){
r = r.substring(0,r.length()-1);
}else{
//如果拼接的字符串的上一个字符不可对应消除:错
return false;
}
}else{
//如果当前位置 是括号的开头
//无法消除,则继续拼接字符串
r += curr;
}
}
//最后检查拼接的字符串长度,长度!=0,说明有括号未对应消除掉:错
return r.length()==0;
}
}
复制代码
2.N-Repeated Element in Size 2N Array
In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeated N times.
Return the element repeated N times.
Input: [1,2,3,3]
Output: 3
Input: [2,1,2,5,3,2]
Output: 2
复制代码
思路:
1:
既然有1个数字占据了数组的1/2,我们将数组进行分割,2个元素1组,极端情况下用于看不到重复元素.
但是如果3个元素一组, 即使是极端情况,我们也可以在某一组3个元素中检查到重复对象,
如果检查不到,分组剩下的元素就一定是目标值.
2:
当然可以利用现成的API,使用Set.add每个元素,通过返回的boolean值来判断是否取到重复元素.
class Solution {
public int repeatedNTimes(int[] A) {
int count = A.length/3;
for(int i=0;i<count;i++){
if(A[i*3] == A[i*3 + 1] || A[i*3] == A[i*3 + 2]) return A[i*3];
if(A[i*3 + 1] == A[i*3 + 2]) return A[i*3 + 1];
}
return A[3*count];
}
}
复制代码