[算法很美打卡第四天] 字符串篇(中)

news2024/9/24 23:23:40

文章目录

  • 压缩字符串
    • 代码
  • 判断两字符串的字符集是否相同
    • 代码
  • 旋转词
    • 代码
  • 反转单词
    • 代码
  • 回文串验证
    • 代码
  • 去掉字符串中连接出现的k次的0
    • 代码

压缩字符串

在这里插入图片描述

代码

package 每日算法学习打卡.算法打卡.八月份;

public class test1 {
    public static void main(String[] args) {
        String s = "avss";
        System.out.println(zipString(s));
    }

    public static String zipString(String src) {
        StringBuilder sb = new StringBuilder(); // 用来拼接形成新字符串
        char temp = 0; // 上一个字符
        int count = 0; // 计数,字符出现了几次

        for (int i = 0; i < src.length(); i++) {
            char charAt = src.charAt(i); // 当前字符
            if (sb.length() == 0) { // 处理第一个字符
                sb.append(charAt);
                temp = charAt;
                count = 1;
            } else { // 处理除第一个字符外其他字符
                if (temp == charAt) {
                    count++; // 当前字符与temp相同,计数+1
                } else { // 当前字符与temp不同
                    sb.append(count).append(charAt); // 将前一个不同字符的数量、新一个字符加入sb
                    temp = charAt; // 更新temp为当前字符
                    count = 1; // 更新计数值为1
                }
            }
        }

        // 循环结束后最后一个字符的情况可能没有记录下去
        if (count >= 1)
            sb.append(count);

        // 比较新字符串和原字符串
        if (sb.length() >= src.length())
            return src;

        return sb.toString();
    }
}

判断两字符串的字符集是否相同

代码

使用Unicode256编码集解决

package 每日算法学习打卡.算法打卡.八月份;

public class test2 {
    //使用ACII编码进行核对
    public static void main(String[] args) {
        String s1 = "aaa";
        String s2 = "aac";
        System.out.println(check(s1,s2));
    }

    public static boolean check(String s1, String s2) {
        int[] help = new int[256];
        for (int i = 0; i < s1.length(); i++) {
            char c = s1.charAt(i);
            if (help[c] == 0) {
                help[c] = 1;
            }
        }
        for (int i = 0; i < s2.length(); i++) {
            char c = s2.charAt(i);
            if (help[c] == 0) {
                return false;
            }
        }
        return true;

    }
}

使用hashmap解决:

package 每日算法学习打卡.算法打卡.八月份;

import java.util.HashMap;
import java.util.Map;

public class test3 {
    public static void main(String[] args) {
        String s1 = "aaa";
        String s2 = "aac";
        System.out.println(hashCheck(s1,s2));
    }
    public static boolean hashCheck(String s1,String s2){
        Map<Character,Integer> map = new HashMap<Character,Integer>();
        for(int i =0;i<s1.length();i++){
            char c = s1.charAt(i);
            if(map.get(c) == null){
                map.put(c,1);
            }
        }
        for(int i =0;i<s2.length();i++){
            char c = s2.charAt(i);
            if(map.get(c) == null){
                return false;
            }
        }
        return true;
    }

}

旋转词

在这里插入图片描述

代码

package 每日算法学习打卡.算法打卡.八月份;

public class test4 {
    public static void main(String[] args) {
        String s1 = "aaass";
        String s2 = "aassa";
        System.out.println(reverseString(s1,s2));
    }
    //旋转词
    public static boolean reverseString(String s1,String s2){
        StringBuilder sb = new StringBuilder(s1).append(s1);
        return sb.toString().contains(s2);
    }
}

反转单词

代码

package 每日算法学习打卡.算法打卡.八月份;

public class test5 {
    //将字符串中安单词翻转
    public static void main(String[] args) {
        String s = reverse("here are you");
        System.out.println(s);
    }
    public static String reverse(String src){
        String[] help = src.split("\\s");
        StringBuilder sb = new StringBuilder();
        for(int i = help.length-1;i>=0;i--){
            sb.append(help[i] +" ");
        }
        return sb.deleteCharAt(sb.length()-1).toString();
    }
}

回文串验证

代码

package 每日算法学习打卡.算法打卡.八月份;

public class test8 {
    public static void main(String[] args) {
    
    }
    public static boolean isPalindrome(String src){
        if(src.isEmpty()){
            return true;
        }
        return src.equals(new StringBuilder(src).reverse().toString());
    }
    
}

去掉字符串中连接出现的k次的0

代码

package 每日算法学习打卡.算法打卡.八月份;

public class test7 {
    public static void main(String[] args) {
        String s = "aaa00aaa";
        System.out.println(remove2(s,2));
    }
    // 常规做法
    public static String remove2(String s, int k) {
        char[] arr = s.toCharArray(); // 转为字符型数组
        int cnt = 0; // 计数
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            char c = arr[i];
            if (c == '0') // 若发现0,进行计数
                cnt++;
            else { // 若不是0,加入sb
                for (int j = 0; j < cnt % k; j++) { // 将超过k个的0超出部分加入sb
                    sb.append('0');
                }
                sb.append(c); // 不是0的字符直接加入
                cnt = 0; // 重置计数器
            }
        }

        // 字符串末尾可能存在0,跳出上一个循环后只进行了计数,没有判断是否需要加入sb
        // 在此补充操作
        for (int i = 0; i < cnt % k; i++) {
            sb.append('0');
        }

        return sb.toString();
    }

}

正则表达式:

package 每日算法学习打卡.算法打卡.八月份;

public class test6 {
    public static void main(String[] args) {
        String s = "aaa00aaa";
        System.out.println(remove(s,2));
    }
    public static String remove(String s,int n){
        String regexp = "0{"+n+"}";
        return s.replaceAll(regexp,"");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/822774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

替换linux的文泉驿正黑fonts-wqy-zenhei字体 替换linux默认中文字体

WSL 怎么替换 linux 的文泉驿正黑 fonts-wqy-zenhei 字体 WSL 怎么替换 linux 默认中文字体 在 wsl 中默认是没有 gnome 界面或者 xface 的&#xff0c;但是我需要使用 wsl 开发 electron 或者使用 chrome 浏览器。这个时候系统就会调用默认的系统字体了。 我使用的是 debian…

国产分布式数据库——TDSQL性能分析工具

一、TDSQL概述 TDSQL是腾讯研发的一款兼容MySQL协议的国产分布式数据库&#xff0c;适用于大并发、高性能、大容量的OLTP类场景。TDSQL分为集中式和分布式版本&#xff0c;分布式版可支持分布式事务&#xff0c;但性能不如单机事务&#xff0c;性能会有一定的损耗&#xff0c;…

Android系统的进程管理(创建->优先级->回收)

一、进程的创建 1、概述 Android系统以Linux内核为基础&#xff0c;所以对于进程的管理自然离不开Linux本身提供的机制。例如&#xff1a; 通过fork来创建进行通过信号量来管理进程通过proc文件系统来查询和调整进程状态 等 对于Android来说&#xff0c;进程管理的主要内容…

EMC VNX1系列存储电池状态说明

SPS电池正常的状态为“Present”。 SPS电池故障时的状态为“Faulted”。 更换SPS后&#xff0c;SPS开始充电&#xff0c;此时状态显示为“Not Ready”状态。 充电完成后显示为Present状态。如果充电完成后状态前面有“F”标记&#xff0c;则需要重启对应的控制器以更新SPS…

2023年最新智能优化算法之——切诺贝利灾难优化器 (CDO),附MATLAB代码和文献

切诺贝利灾难优化器Chernobyl Disaster Optimizer (CDO)是H. Shehadeh于2023年提出的新型智能优化算法。该方法是受到切尔诺贝利核反应堆堆芯爆炸而来的启发。在CDO方法中&#xff0c;放射性的发生是由于核的不稳定性&#xff0c;核爆炸会发出不同类型的辐射。这些辐射中最常见…

vue2、vue3生命周期详解以及对比

文章目录 对比vue2-vue3vue3生命周期生命周期的主要阶段详情 vue2 生命周期生命周期钩子函数 总共11个 常用的8个按照这四个阶段我们对应有八个生命周期钩子函数vue生命周期使用场景 对比vue2-vue3 如果熟悉vue2的话&#xff0c;vue3信手拈来&#xff0c;看图 vue3生命周期 on…

Qt应用开发(基础篇)——滑块类 Slider、ScrollBar、Dial

一、前言 滑块类QScrollBar、QSlider和QDial继承于QAbstractSlider&#xff0c;父类主要拥有最大值、最小值、步长、当前值、滑块坐标等信息&#xff0c;滑动的时候触发包含值数据变化、滑块按下、滑块释放等信号。键盘包括左/上和右/下箭头键通过定义的singleStep改变当前值&a…

idea调节文字大小、日志颜色、git改动信息

idea调节菜单栏文字大小&#xff1a; 调节代码文字大小&#xff1a; 按住ctrl滚动滑轮可以调节代码文字大小&#xff1a; 单击文件即可在主窗口上打开显示&#xff1a; idea在控制台对不同级别的日志打印不同颜色 &#xff1a; “grep console”插件 点击某一行的时候&#x…

北方多地暴雨引思考:如何降低暴雨负面影响?

受今年第五号台风“杜苏芮”残余环流北上影响&#xff0c;北方多地这两天出现了大范围的强降雨。 7月31日晚上&#xff0c;国家防总办公室、应急管理部加密研判会商&#xff0c;与中国气象局、水利部会商研判&#xff0c;视频连线北京、天津、河北等重点省份&#xff0c;滚动分…

通用版Bubble_sort

❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今后学习其它语言打好基础&#xff0c;C生万物&#xff01; 开始我们的C语言之旅吧&#xff01;✈ 目录 前言&#xff1a; 一.分析Bubble_sort 二.解决措施 三.模拟实现 前言&#xff…

LInux的安装(VMware,网卡设置,SSH连接工具)

Linux的安装 1、安装方式介绍 1.安装方式: 物理机安装:直接将操作系统安装到服务器硬件上 虚拟机安装:通过虚拟机软件安装 **虚拟机( Virtual Machine&#xff09;**指通过软件模拟的具有完整硬件系统功能、运行在完全隔离环境中的完整计算机系统。 2、安装Linux 在官网将…

VMWare vSphere 7.0.3环境通过PowerCLI批量发布openeuler22.03LTS系统虚拟机

本文尝试在VMWare vSphere 7.0.3环境中&#xff0c;通过PowerCLI批量发布openeuler22.03LTS系统虚拟机&#xff0c;以减轻维护人员的工作量。 一、在维护机上安装PowerCLI 1、点击以下链接&#xff0c;跳转到VMWarePowerCLI官方页面 VMware PowerCLI下载链接 2、点击下载链…

【Python】simplekml如何设置样式(解决simplekml样式不生效)

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、基本样式常用 二、共享样式三、全局样式1.结果2.代码 前言 simplekml是一个用于创建kml文件的库&#xff0c;里面提供了丰富的功能和…

【编程】典型题目:寻找数组第K大数(四种方法对比)

【编程】典型题目&#xff1a;寻找数组第K大数&#xff08;四种方法对比&#xff09; 文章目录 【编程】典型题目&#xff1a;寻找数组第K大数&#xff08;四种方法对比&#xff09;1. 题目2. 题解2.1 方法一&#xff1a;全局排序&#xff08;粗暴&#xff09;2.2 方法二&#…

数据结构-链表结构-双向链表

双向链表 双向链表的定义 双向链表也叫双链表&#xff0c;与单向链表不同的是&#xff0c;每一个节点有三个区域组成&#xff1a;两个指针域&#xff0c;一个数据域 前一个指针域&#xff1a;存储前驱节点的内存地址后一个指针域&#xff1a;存储后继节点的内存地址数据域&a…

Java开发中的------修改密码+忘记密码

目录 1.修改密码 客户端响应 前端vue 后端 controller层 ServiceImpl实现层 2.忘记密码 客户端响应 后端 controller层 serviceImpl实现层 本章需要准备&#xff1a;springcloud项目&#xff0c;依赖&#xff0c;数据库.... 数据库SQL SET FOREIGN_KEY_CHECKS0;-- -…

C++设计模式之责任链设计模式

C责任链设计模式 什么是责任链设计模式 责任链设计模式是一种行为型设计模式&#xff0c;它允许多个处理请求的对象串联起来&#xff0c;形成一个处理请求的链。每个对象都有机会处理请求&#xff0c;如果该对象不能处理请求&#xff0c;则将请求传递给链中的下一个对象。 该…

Inkscape 1.3 版开放源代码 SVG 编辑器发布,新增形状生成器工具和许多更改

导读Inkscape 是功能强大的开源、跨平台、免费 SVG&#xff08;可缩放矢量图形&#xff09;编辑器&#xff0c;今天已更新到稳定的 1.3 版&#xff0c;这是一个引入新功能和许多改进的重要版本。 Inkscape 1.3 是在 Inkscape 1.2 发布一年零两个月后推出的&#xff0c;它引入了…

[pymc3][python]pymc3安装后测试代码2

测试环境&#xff1a; pymc33.11.2 代码&#xff1a; import numpy as np import pymc3 as pm import matplotlib.pyplot as pltif __name__ __main__:# 生成随机数据np.random.seed(123)x np.linspace(0, 1, 100)y 0.5 * x np.random.normal(0, 0.1, size100)# 定义概率…

C/C++算法——散列表

1、散列表介绍 散列表的英文叫Hash Table&#xff0c;我们平时也叫它哈希表或者Hash 表。散列表用的是数组支持按照下标随机访问数据的特性&#xff0c;所以散列表其实就是数组的一种扩展&#xff0c;由数组演化而来。可以说&#xff0c;如果没有数组&#xff0c;就没有散列表。…