字符串汇总

2023-11-11

一、字符串表达式计算

如 1+(2-2*3)

package TcpIO;

import java.util.Deque;
import java.util.LinkedList;

public class StringCalculate {
    static int getPriority(char ch){
        if(ch=='(') return 1;
        if(ch=='+' || ch=='-') return 2;
        if(ch=='*' || ch=='/') return 3;
        return 4;
    }

    static void calculate(Deque<Integer> numStk,char opr){
        int num2=numStk.pop();
        int num1=numStk.pop();
        int res=0;
        if(opr=='+'){
            res=num1+num2;
        }else if(opr=='-'){
            res=num1-num2;
        }else if(opr=='*'){
            res=num1*num2;
        }else if(opr=='/'){
            res=num1/num2;
        }
        numStk.push(res);
        return;
    }

    public static void main(String[] args) {
        String s = "1+23*4-(5+6)";
        char[] arr = s.toCharArray();
        Deque<Integer> numStack = new LinkedList<>();
        Deque<Character> oprStack = new LinkedList<>();
        int i = 0;
        int strLength = s.length();
        char tmpOpr;
        boolean negative = false;
//        char first = s.charAt(1);
        if(arr[0] == '-'){
            i = 1;
            negative = true;
        }
        while(i < strLength){
            if(i !=0 && arr[i] == '-' && arr[i-1] != ')' && (arr[i-1] < '0' || arr[i - 1] > '9')){
                negative = true;
                i++;
                continue;
            }
            if(arr[i]>='0' && arr[i]<='9'){
                int tmpNum = 0;
                while(i < strLength && arr[i]>='0' && arr[i]<='9'){
                    tmpNum = 10 * tmpNum + arr[i] - '0';
                    i++;
                }
                if(negative){
                    tmpNum *= -1;
                    negative = false;
                }
                numStack.push(tmpNum);
            }
            else if(arr[i] == '+' || arr[i] == '-' || arr[i]=='*' || arr[i]=='/'){
                if (oprStack.isEmpty()){
                    oprStack.push(arr[i]);
                }
                else{
                    while(!oprStack.isEmpty()){
                        tmpOpr = oprStack.peek();
                        if(getPriority(tmpOpr) >= getPriority(arr[i])){
                            //calculate
                            calculate(numStack,tmpOpr);
                            oprStack.pop();
                        }else{
                            break;
                        }
                    }
                    oprStack.push(arr[i]);
                }
                i++;
            }
            else{
                if (arr[i] == '('){
                    oprStack.push(arr[i]);
                }
                else{
                    while(oprStack.peek() != '('){
                        tmpOpr = oprStack.pop();
                        calculate(numStack, tmpOpr);
                    }
                    oprStack.pop();
                }
                i++;
            }
        }
        while(!oprStack.isEmpty()){
            tmpOpr = oprStack.pop();
            calculate(numStack, tmpOpr);
        }
        System.out.println(numStack.peek());
    }
}

二、n个字符(没有重复字符)选m个元素,生成所有排列,不能有重复字符,返回值按照字典序升序返回

融合 组合(剑指 Offer II 080. 含有 k 个元素的组合) 排列(剑指 Offer 38. 字符串的排列)两个题

注意排列解题思想 递归交换发生在回去的时候,逆向思想;

力扣

力扣

输入 n个字符 m

         [0,1,2], 2

输出 ["01", "02", "10", "12", "20", "21"]

输入 [0,1,2,3,A], 3

输出 ["012","013","01A",....]

共60个不重复字符

package zsh;

import java.util.*;

public class Qianxing2 {
    public static void main(String[] args) {
//        List<Character> list = new ArrayList<>();
//        list.add('0');
//        list.add('1');
//        list.add('2');
//        String str = String.valueOf(list);
//        permu(list);
//        Collections.sort(res);
        char[] seed = {'0', '1', '2', '3', 'A'};
        int size = 3;
        Combine (seed, size);
        System.out.println(1);
    }

    static List<String> res = new LinkedList<>();

    public static String[] Combine (char[] seed, int size) {
        char[] arr = new char[size];
        List<List<Character>> lists = new ArrayList<>();
        dfsCombine(0, lists, new ArrayList<>(), seed, size);
        for (int i = 0; i < lists.size(); i++) {
            Permutation(lists.get(i));
        }
        Collections.sort(res);  //按字典序
        return res.toArray(new String[res.size()]);
    }

    static void dfsCombine(int index, List<List<Character>> lists, List<Character> listCom, char[] seed, int remain){
        //当剩余需要添加的数的个数是0的时候,已经满足数据个数了,保存并结束方法
        if(remain == 0){
            lists.add(new ArrayList<>(listCom));
            return;
        }
        //当index>n时,已经超出n的范围了,结束
        if(index >= seed.length){
            return;
        }
        for (int i = index; i <= seed.length - remain; i++) {
            listCom.add(seed[i]);
            dfsCombine(i+1, lists, listCom, seed,remain - 1);
            listCom.remove(listCom.size() - 1);
        }
    }
    //排列
    public static void Permutation(List<Character> listPer){
        dfsPermutation(0, listPer);
    }

    static void dfsPermutation(int index, List<Character> listPer){
        if(index == listPer.size() - 1){
            StringBuilder sb = new StringBuilder();
            for (char c : listPer){
                sb.append(c);
            }
            res.add(sb.toString());  // 添加排列方案
//            res.add(String.valueOf(listPer));
            return;
        }
        HashSet<Character> set = new HashSet<>();
        for (int i = index; i < listPer.size(); i++) {
            if(set.contains(listPer.get(i))){
                continue;  // 重复,因此剪枝
            }
            set.add(listPer.get(i));
            swap(i, index, listPer);  // 交换,将 c[i] 固定在第 x 位
            dfsPermutation(index+1, listPer);  // 开启固定第 x + 1 位字符
            swap(i, index, listPer);  // 恢复交换
        }
    }

    static void swap(int a, int b, List<Character> list){
        char temp = list.get(a);
        list.set(a, list.get(b));
        list.set(b, temp);
    }
}

三、在字符串S中不重叠的“AB”和“BA”子串,找到返回true,否则返回false

例 “ABBA” true           “ABA” false         “ABABA” true

"ABAAB" true        "BABBA" true

思路:正反两遍遍历字符串,避免出现ABAAB,正向遍历搜不出来的情况。

package zsh;

public class YiTu {
    public static void main(String[] args) {
        boolean res = substr("BAB");
        System.out.println(res);
    }
    public static boolean substr(String str){
        boolean flag1 = false;
        boolean sign1 = false;
        boolean flag2 = false;
        boolean sign2 = false;
        int len = str.length();
        char[] chars = str.toCharArray();
        for(int i = 0; i < len - 1; i++){
            if(!flag1 && chars[i] == 'A' && chars[i+1] == 'B'){
                flag1 = true;
                i++;
            }
            else if(!sign1 && chars[i] == 'B' && chars[i+1] == 'A'){
                sign1 = true;
                i++;
            }
        }
        for(int i = len-1; i > 0; i--){
            if(!sign2 && chars[i] == 'A' && chars[i-1] == 'B'){
                sign2 = true;
                i--;
            }
            else if(!flag2 && chars[i] == 'B' && chars[i-1] == 'A'){
                flag2 = true;
                i--;
            }
        }
        return (sign1 && flag1) || (sign2 && flag2);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串汇总 的相关文章

  • 盘点Python爬虫中的常见加密算法,建议收藏!!

    相信大家在数据抓取的时候 会碰到很多加密的参数 例如像是 token sign 等等 今天小编就带着大家来盘点一下数据抓取过程中这些主流的加密算法 它们有什么特征 加密的方式有哪些等等 知道了这些之后对于我们逆向破解这些加密的参数会起到不少
  • 若依管理系统修改背景色

    前言 若依管理系统的背景色默认是白色的 我们想把它改成如上图的背景色 在哪里改呢 在如上图的main js里 框架引入了全局样式 在index scss中又引入了sidebar scss等文件 如上图 在sidebar scss里 main

随机推荐

  • 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现 排序 查找 数组 链表 栈 队列 树 递归 海量数据处理 图 位图 Java版数据结构 数据结构和算法作为程序员的基本功 一定得稳扎稳打的学习 我们常见的框架底层就是各类数据结构 例如跳表之于redis B 树之于m
  • 攻略|如何成为Moonbeam收集人

    Moonbeam与其他PoS机制EVM公链类似 仰赖节点的运营保持网络的顺利运行以及安全 Moonbeam作为同时兼容Substrate和以太坊API的开发平台 同以太坊主网相比仍存在差异 在Moonbeam的生态中 节点运营者被称为收集人
  • 以太坊源码学习(一)

    转载自 https blog csdn net karizhang article details 79110981 背景 geth源码一直在不断增加 优化 发展到现在已经非常庞大 第一次看geth源码 会有不小的难度 虽然如此 还是可以从
  • ajax让session丢失,在static资源里使用ajax请求session丢失?

    准备用express做一个登陆模块 前台是用react做的 我在submit按钮handle是这么写的 handleSubmit e e preventDefault fetch login method POST headers Cont
  • 小程序中的ES6 Class

    movie detail js原始写法 var app getApp 引用 var util require utils utils js 引用数据请求的公共函数 Page 初始化数据 data movie es6方式 module cla
  • Python的包安装工具——pip命令大全

    对于大多数使用Python的人来说 一定知道pip这个包安装工具 但是对pip可能还不是很了解 今天作者给大家介绍一下pip的命令 以方便灵活使用pip 一 pip工具使用方法 pip的语法如下 pip
  • wsimport命令生成webService java客户端代码

    wsimport简介 在JDK的bin文件夹中 有一个wsimport exe工具 可依据wsdl文件生成相应的类文件 将生存在本地这些类文件拷贝到需要使用的项目中 就可以像调用本地的类一样调用webService提供的方法 该工具可以用于
  • Github国内镜像网址,亲测好用

    最新国内镜像网址 不定期测试更新可用网址 建议先收藏 https kgithub com 使用方式 将github源网址前面加k即可 限制 1 不能注册 2 不能上传文件 可以登录 可以在线编辑
  • 【机器学习实战系列】读书笔记之利用SVD简化数据(一)

    本文详细说明机器学习实战这本书中的示例 餐厅菜肴推荐引擎的算法 5 1 推荐未尝过的菜肴 推荐系统的工作过程是 给定一个用户 系统会为此用户返回N个最好的推荐菜 为了实现这一点 则需要做到 寻找用户没有评级的菜肴 即在用户 物品矩阵中的0值
  • 算法其实很简单—马踏棋盘算法(骑士周游)

    目录 1 马踏棋盘算法介绍和游戏演示 2 马踏棋盘游戏代码实现 3 骑士周游问题的解决步骤和思路 4 代码优化 5 代码实现 1 马踏棋盘算法介绍和游戏演示 1 马踏棋盘算法也被称为骑士周游问题 2 将马随机放在国际象棋的8X8棋盘Boar
  • mysql 中查询特定月份的数据 时间格式是 yyyy-mm-dd

    查询特定月份的数据 时间格式是 yyyy mm dd select from table where year create time 2019 and month create time in 2 3 4
  • Uipath Error loading Python script

    第一 脚本首行声明编码格式 加一行 coding utf 8 第二 将脚本中所有中文换为英文
  • Checked exception is invalid for this method!异常解决方案

    在用mockito来模拟异常的时候 当要抛出自定义的异常 而非RuntimeException等自定义异常时 常常会出现如下错误信息 Checked exception is invalid for this method 以前我可以通过
  • 基于设计需求的单元测试和单元测试详细说明书

    技术文章版块持续更新本周为您分享的文章是 基于设计需求的单元测试和单元测试详细说明书 兜兜转转回到了单元测试的知识点 要是有兴趣的话 请继续读下去吧 1 何为基于设计需求的单元测试 大部分汽车行业遵循ISO制定的汽车功能安全国际标准ISO
  • 数据结构学习笔记(一)数据结构概论

    文章目录 1 前言 2 概念 3 分类 3 1 线性结构 3 2 非线性结构 1 前言 本系列笔记基于 清华大学出版社的 数据结构 用面向对象方法与C 语言描述 第二版进行学习 2 概念 数据是信息的载体 是描述客观事物的数 字符 以及所有
  • 【国赛清单】2023全国大学生电赛综合测试【总结】

    综合测评简介 1 综合测评是全国大学生电子设计竞赛评审工作中非常重要的一个环节 是 一次竞赛二级评审 工作中全国专家组评审工作的一部分 2 测试对象为赛区推荐上报全国评奖的优秀参赛队全体队员 以队为单位在各赛区以全封闭方式进行 测试现场必须
  • git上传文件到远程分支

    1 进入文件目录 kernel 执行make distclean 清除配置文件 2 查看所在分支 git branch a 3 查看远程分支 git branch r 3 添加文件到分支 git add git commit m XXXX
  • C++ 数据类型

    C 数据类型 使用编程语言进行编程时 需要用到各种变量来存储各种信息 变量保留的是它所存储的值的内存位置 这意味着 当您创建一个变量时 就会在内存中保留一些空间 您可能需要存储各种数据类型 比如字符型 宽字符型 整型 浮点型 双浮点型 布尔
  • Nginx配置白名单访问

    一 背景 在项目运行的时候 需要设置特定的访问权限 以拒绝其他可能存在的恶意访问 二 配置 2 1 关键字 允许访问关键字 allow 屏蔽访问关键字 deny 2 2 作用域 作用域如下 http 所有网站屏蔽IP server 单独网站
  • 字符串汇总

    一 字符串表达式计算 如 1 2 2 3 package TcpIO import java util Deque import java util LinkedList public class StringCalculate stati