首页 > 其他分享 >删除无效的括号(广度优先搜索、字符串)、计算右侧小于当前元素的个数(树状数组、线段树)、Excel表列名称(数学、字符串)

删除无效的括号(广度优先搜索、字符串)、计算右侧小于当前元素的个数(树状数组、线段树)、Excel表列名称(数学、字符串)

时间:2023-04-15 11:33:50浏览次数:33  
标签:nums int 示例 Excel 表列 value valid 字符串 rightCount

删除无效的括号(广度优先搜索、字符串)

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。

示例 1: 输入:s = "()())()" 输出:["(())()","()()()"] 示例 2: 输入:s = "(a)())()" 输出:["(a())()","(a)()()"] 示例 3: 输入:s = ")(" 输出:[""]

提示:

  • 1 <= s.length <= 25
  • s 由小写英文字母以及括号 '(' 和 ')' 组成
  • s 中至多含 20 个括号

解答:

public class Solution {
    private Set<String> set;
    private String input;
    private int maxLen = 0;
    public List<String> removeInvalidParentheses(String s) {
        set = new HashSet<>();
        input = s;
        removeInvalidParentheses(0, "", 0, 0);
        return new ArrayList<>(set);
    }
    private void removeInvalidParentheses(int index, String valid, int leftCount, int rightCount) {
        if (leftCount < rightCount) {
            return;
        }
        if (index == input.length()) {
            if (leftCount == rightCount) {
                if (maxLen < valid.length()) {
                    maxLen = valid.length();
                    set.clear();
                    set.add(valid);
                } else if (maxLen == valid.length()) {
                    set.add(valid);
                }
            }
            return;
        }
        char c = input.charAt(index);
        if (c == '(') {
            removeInvalidParentheses(index + 1, valid, leftCount, rightCount);
            removeInvalidParentheses(index + 1, valid + c, leftCount + 1, rightCount);
        } else if (c == ')') {
            removeInvalidParentheses(index + 1, valid, leftCount, rightCount);
            removeInvalidParentheses(index + 1, valid + c, leftCount, rightCount + 1);
        } else {
            removeInvalidParentheses(index + 1, valid + c, leftCount, rightCount);
        }
    }
}

计算右侧小于当前元素的个数(树状数组、线段树)

给你`一个整数数组 nums_ ,按要求返回一个新数组 counts _。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。

示例 1: 输入:nums = [5,2,6,1] 输出:[2,1,1,0]
解释: 5 的右侧有 2 个更小的元素 (2 和 1) 2 的右侧仅有 1 个更小的元素 (1) 6 的右侧有 1 个更小的元素 (1) 1 的右侧有 0 个更小的元素 示例 2: 输入:nums = [-1] 输出:[0] 示例 3: 输入:nums = [-1,-1] 输出:[0,0]

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

解答:

class Solution {
    public static List<Integer> countSmaller(int[] nums) {
        if (nums.length == 0) {
            return new ArrayList<>();
        }
        int min = Integer.MAX_VALUE;
        for (int value : nums) {
            if (value < min) {
                min = value;
            }
        }
        for (int i = 0; i < nums.length; i++) {
            nums[i] = nums[i] - min + 1;
        }
        int max = Integer.MIN_VALUE;
        for (int value : nums) {
            if (value > max) {
                max = value;
            }
        }
        int[] BITree = new int[max + 1];
        BITree[0] = 0;
        int[] countArr = new int[nums.length];
        for (int i = nums.length - 1; i >= 0; i--) {
            int count = getSum(nums[i] - 1, BITree);
            countArr[i] = count;
            update(nums[i], BITree);
        }
        List<Integer> result = new ArrayList<>();
        for (int value : countArr) {
            result.add(value);
        }
        return result;
    }
    public static int getSum(int value, int[] BITree) {
        int sum = 0;
        while (value > 0) {
            sum += BITree[value];
            value -= (value & -value);
        }
        return sum;
    }
    public static void update(int value, int[] BITree) {
        while (value <= BITree.length - 1) {
            BITree[value] += 1;
            value += (value & -value);
        }
    }
}

Excel表列名称(数学、字符串)

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...

示例 1: 输入:columnNumber = 1 输出:"A" 示例 2: 输入:columnNumber = 28 输出:"AB" 示例 3: 输入:columnNumber = 701 输出:"ZY" 示例 4: 输入:columnNumber = 2147483647 输出:"FXSHRXW"

提示:

  • 1 <= columnNumber <= 231 - 1

解答:

class Solution {
    public String convertToTitle(int n) {
        if (n <= 0) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        while (n > 0) {
            n--;
            sb.append((char) (n % 26 + 'A'));
            n = n / 26;
        }
        return sb.reverse().toString();
    }
}

本文内容到此结束了, 如有收获欢迎点赞

标签:nums,int,示例,Excel,表列,value,valid,字符串,rightCount
From: https://blog.51cto.com/zhanjq/6192248

相关文章

  • Python字符串处理
    Python之正则表达式正则表达式重在处理字符串规则普通字符importre#普通字符result=re.findall("p","python")print(result,type(result))result=re.findall("o","Ilovepython")print(result,type(result))预定义字符模式描述\d匹配所有数字0......
  • 字符串哈希
    算法简介字符串哈希是将字符串映射为数字的算法,它通常用来解决快速判断两个字符串是否相等的问题。时间复杂度\(O(n+m)\)实现原理1.构造原理字符串哈希运用了进制的思想,将字符串变为p进制的数字。如:""可以映射为:\((X_1*P^{n-1}+X_2*P^{n-2}+\cdots+X^{n-1......
  • 97. 交错字符串
    classSolution{public:boolf[110][110];boolisInterleave(strings1,strings2,strings3){intn=s1.size(),m=s2.size();if(n+m!=s3.size())returnfalse;s1=''+s1;s2=''+s2;s3=�......
  • vue通过Export2Excel.js进行导入excel,获取数据
    <!--封装的模板下载和导入按钮和功能组件--><template><spanstyle="margin-left:10px"><el-buttonsize="mini"class="el-icon-download"@click="downFiles">下载模板</el-button><el-upload......
  • python 正则处理字符串,使用函数
    """在正则截取的字符子串基础上,处理字符串Python的re模块提供了re.sub用于替换字符串中的匹配项。语法:re.sub(pattern,repl,string,count=0,flags=0)参数:pattern:正则中的模式字符串。repl:替换的字符串,也可为一个函数。string:要被查找替换的原始字符串。cou......
  • 对比Python中的列表、元组、字典、集合、字符串等之间异同
    1.数据类型列表、元组、字典、集合、字符串均属于python3的标准数据类型。字符串和元组属于不可变数据,即创建后不可修改。列表、字典、集合属于可变数据,即创建后可以修改元素。2.创建有元素的对象3.创建没有元素的对象列表使用eval()或list()或中括号[]进行创建,元素之间使用逗号分......
  • JavaScript 之 JSON [4] parse()和stringify() -JSON字符串和JavaScript对象数据之间
    JavaScript之JSON[4]parse()和stringify()-JSON字符串和JavaScript对象数据之间的相互转换1、JSON.parse()JSON.parse()方法用于将一个JSON字符串解析为一个JavaScript对象。JSON字符串必须使用双引号包括属性名和字符串值,不能使用单引号或无引号。语法:JSON.parse(text,r......
  • js 查找字符串中指定字符 模糊查询 不区分大小写
    varstr="helloworld!hellocoder!";//查找‘HELLO’是否存在,找不到返回nullvarreg=newRegExp('HELLO','i');varisHas=str.match(reg);console.log(isHas);//打印结果:["hello",index:0,input:"hellow......
  • 字符串匹配算法KMP
    KMP算法是字符串的匹配算法,比如我给一个名为《文本》的字符串,和一个名为《样板》的字符串,询问《样板》在《文本》中出现过的次数,这就需要字符串匹配算法。对于匹配,形象一点可以看例子:《文本1》="abcdefghigklmn"《样板1》="abc"=============================《文本2》="abcde......
  • Mysql_批量替换 MySQL 指定字段中的字符串
    批量替换的具体语法是:UPDATE表名SET 指定字段=replace(指定字段,'要替换的字符串','想要的字符串') WHERE条件;  如果你想把article表中ID小于5000的记录,content字段中“解决”替换成“解放”,那么语法就是:UPDATEarticleSET content=replace(content,'解决',......