• 力扣刷题日志——字符串和栈


    有效的括号

    在这里插入图片描述

    在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了
    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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    反转字符串中的单词

    在这里插入图片描述

    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);//这里最后减一就解决了最后一个单词后多出一个空格的问题
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    左旋转字符串

    在这里插入图片描述

    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--;
                }
            }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    4、SpringMVC获取请求参数
    云安全-云服务器(RAM)后渗透
    蜜罐技术是什么?为什么黑客最怕踩到蜜罐?
    基于java+SpringBoot+HTML+Mysql)疫情防控微信小程序
    android获取RAM、CPU频率、系统版本、CPU核数
    IOday7
    利用clamp()超快速实现响应式布局
    Vue3树形控件实现跳转页面
    设计资讯 | 巴黎 2024 年奥运会“另一个自我”以 DAB 汽车定制电动摩托车的形式亮相
    零基础学Python:Pandas用法
  • 原文地址:https://blog.csdn.net/crisp0530/article/details/126914166