在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了
isEmpty()是空的时候返回 1,否则返回FALSE,deque.peek()是返回栈顶元素
class Solution {
public boolean isValid(String s) {
Deque<Character> deque = new LinkedList<>();
char ch;
for(int i=0;i<s.length();i++){
ch=s.charAt(i);
if(ch=='('){
deque.push(')');
}else if(ch == '{'){
deque.push('}');
}else if(ch == '['){
deque.push(']');
}else if(deque.isEmpty()||deque.peek()!=ch){
return false;
}else{
deque.pop();
}
}
return deque.isEmpty();
}
}
class Solution {
public String reverseWords(String s) {
//源字符数组
char[] initialArr = s.toCharArray();
//新字符数组
char[] newArr = new char[initialArr.length+1];//下面循环添加"单词 ",这里加一是为了下面从后往前遍历时的-1;或者是为了存储末尾单词后多的一个空格
int newArrPos = 0;//新数组的下标
//i来进行整体对源字符数组从后往前遍历
int i = initialArr.length-1;
while(i>=0){
while(i>=0 && initialArr[i] == ' '){i--;} //跳过空格,寻找单词的最后位置
//此时i位置是边界或!=空格,先记录当前索引,之后的while用来确定单词的首字母的位置
int right = i;
while(i>=0 && initialArr[i] != ' '){i--;}
//指定区间单词取出(由于i为首字母的前一位,所以这里+1,),取出的每组末尾都带有一个空格,用来确定单词的开头位置
for (int j = i+1; j <= right; j++) {
newArr[newArrPos++] = initialArr[j];
if(j == right){
newArr[newArrPos++] = ' ';//末尾空格
}
}
}
//若是原始字符串没有单词,直接返回空字符串;若是有单词,返回0-末尾空格索引前范围的字符数组(转成String返回)
if(newArrPos == 0){
return "";
}else{
return new String(newArr,0,newArrPos-1);//这里最后减一就解决了最后一个单词后多出一个空格的问题
}
}
}
JAVA中的reverse方法只能反转一整个字符串,不支持区间内的反转,所以要手写一个方法体,这里我们采取先部分反转然后再整体反转来达到最终结果,
//setCharAt()该方法是StringBuffer中的方法,主要作用是将字符串中指定的位置的字符替换成目标字符,
// setCharAt(int index,char ch)index就是取代的位置 索引从0开始,ch是你要替换为的字符串。
class Solution {
public String reverseLeftWords(String s, int n) {
int len=s.length();
StringBuilder sb=new StringBuilder(s);
reverseString(sb,0,n-1);//先反转前n个
reverseString(sb,n,len-1);//然后反转n之后的剩下的字母
return sb.reverse().toString();//整体反转后转换为字符串的形式。
}
public void reverseString(StringBuilder sb, int start, int end) {
while (start < end) {
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));//setCharAt()该方法是StringBuffer中的方法,主要作用是将字符串中指定的位置的字符替换成目标字符,
// setCharAt(int index,char ch)index就是取代的位置 索引从0开始,ch是你要替换为的字符串。
sb.setCharAt(end, temp);
start++;
end--;
}
}
}