写题第1天

20. 有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

 

有效字符串需满足:

 

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

 

 

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/valid-parentheses

 

只有三种括号,设立三种flag,遇到左括号+1右括号-1最后三种flag都为0则满足,发现遇到“([)]”这种类型时也会返回true,于是用了栈的思维先进先出,判断录入的那一个符号要是为左括号则进入,要是为右括号则先对比栈顶是否为此类型的左括号,是则删除其中的左括号,不是则加入右扩号,显然也不太对,在遇到”{()}“这种类型时会返回false,实际上为true,在之后很长的一段修修改改时间后,用了很多很多的if,我觉得肯定不是这么做的了。

 

去看了大佬的答案,我枯了

记录两个,一个是正经用了栈的,学习栈的用法,同时此种方法与我最开始的第二种思路类似,区别在于正确答案判断为左括号后不将左括号放入栈而是将右扩号放入栈,当判断为右扩号后推出栈顶并比较该右扩号与栈顶是否相同,若是不相同则返回false,左括号push入栈,右扩号pop出栈顶并对比。

class Solution {

    public boolean isValid(String s) {

        Stack<Character>stack = new Stack<Character>();

        for(char c: s.toCharArray()){

            if(c=='(')stack.push(')');

            else if(c=='[')stack.push(']');

            else if(c=='{')stack.push('}');

            else if(stack.isEmpty()||c!=stack.pop())return false;

        }

        return stack.isEmpty();

    }

}

一个是思路独特简单

class Solution {

    public boolean isValid(String s) {

        int length = s.length() / 2;

for (int i = 0; i < length; i++) {

s = s.replace("()", "").replace("{}", "").replace("[]", "");

}

 

return s.length() == 0;

    }

}

然后是究极简单题一道

1920. 基于排列构建数组

给你一个 0 开始的排列 nums(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans ,其中,对于每个 i0 <= i < nums.length),都满足 ans[i] = nums[nums[i]] 。返回构建好的数组 ans

 

0 开始的排列 nums 是一个由 0  nums.length - 10 nums.length - 1 也包含在内)的不同整数组成的数组。

 

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/build-array-from-permutation

 

class Solution {

    public int[] buildArray(int[] nums) {

        int[] ans=new int[nums.length];

        for(int i=0;i<nums.length;i++){

            ans[i]=nums[nums[i]];

        }

        return ans;

    }

}

 

也是一道简单题

1929. 数组串联

给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < n i ,满足下述所有要求:

 

ans[i] == nums[i]

ans[i + n] == nums[i]

具体而言,ans 由两个 nums 数组 串联 形成。

 

返回数组 ans

 

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/concatenation-of-array

做的时候不了解函数,用的死方法

class Solution {

    public int[] getConcatenation(int[] nums) {

        int[] ans=new int[nums.length*2];

        for(int i=0;i<nums.length;i++){

            ans[i]=nums[i];

            ans[i+nums.length]=nums[i];

        }

        return ans;

    }

}

以为java会和python一样有数组操作方法但我不知道,但浏览了一圈题解好像也没有一句解的。不愧是通过率最高的两道题,确实简单。

posted @ 2022-03-15 00:05  水煮小白菜  阅读(44)  评论(0编辑  收藏  举报