算法通关村第十二关-白银挑战字符串经典题目

news2024/9/23 17:13:32

大家好我是苏麟 , 今天带来字符串相关的题目 .

大纲

    • 反转问题
      • 字符串反转
      • K个一组反转
      • 仅仅反转字母
      • 反转字符串中的单词

反转问题

字符串反转

描述 :

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s的形式给出。

题目 :

LeetCode 344. 反转字符串 :

字符串反转

在这里插入图片描述
分析 :

这道题还是很简单的 , 只要把最前边和最后的元素调换就行了 , 用两个变量记录第一个元素下标 和 最后一个变量下标 , 操作变量来完成反转 .

解析 :

class Solution {
    public void reverseString(char[] s) {
        if(s.length == 0 ||s == null){
            return;
        }
        int left = 0;
        int right = s.length - 1;
        for(int i = 0 ;i < s.length / 2;i++){
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }
}

K个一组反转

描述 :

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

题目 :

LeetCode 541. 反转字符串 II :

f反转字符串

在这里插入图片描述
分析 :

我们直接按题意进行模拟就可以: 反转每个下标从 2k的倍数开始的,长度为 k的子串。若该子串长度不足k,则反转整个子串。

解析 :

class Solution {
    public String reverseStr(String s, int k) {
        char[] arr = s.toCharArray();
        int length = s.length();
        for(int i = 0;i < length;i+= 2 *k){
            exchangeArr(arr,i,Math.min(i + k,length) -1 );
        }
        return new String(arr);
    }
    public void exchangeArr(char[] arr, int left , int right){
        while(left < right){
            char a = arr[left];
            arr[left] = arr[right];
            arr[right] = a;
            left++;
            right--;
        }
    }
}

仅仅反转字母

描述 :

给你一个字符串 s ,根据下述规则反转字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。

返回反转后的 s 。

题目 :

LeetCode 917. 仅仅反转字母 :

仅仅反转字母

在这里插入图片描述
分析 :

将 s 中的所有字母单独存入栈中,所以出栈等价于对字母反序操作然后,遍历 s 的所有字符,如果是字母我们就选择栈顶元素输出。

解析 :

class Solution {
    public String reverseOnlyLetters(String s) {
        
        Stack<Character> stack = new Stack<>();
        for(char temp : s.toCharArray()){
            if(Character.isLetter(temp)){
                stack.push(temp);
            }
        }

        StringBuilder ans = new  StringBuilder();
        for(char temp : s.toCharArray()){
            if(Character.isLetter(temp)){
                ans.append(stack.pop());
            }else{
                ans.append(temp);
            }
        }
        return ans.toString();
    }
}

反转字符串中的单词

描述 :

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串

题目 :

LeetCode 151. 反转字符串中的单词 :

反转字符串中的单词

在这里插入图片描述
分析 :

我们可以借助 spilt 函数来分割单词 , 再用 可变字符串 添加单词 .

解析 :

class Solution {
    public String reverseWords(String s) {

        String[] s1 = s.split(" ");
        StringBuilder ans = new StringBuilder();
        for (int i= s1.length - 1; i >= 0 ;i--){
            if(s1[i] != ""){
                ans.append(s1[i]).append(" ");
            }
        }

        return ans.toString().trim();    
    }
}

上面这种方式,在面试的时候,一般也不会让用,所以,我们还是看下面的方式

分析 :

我们自己实现函数的内容 (去除前后多余的空格 , 反转字符串)

在这里插入图片描述

解析 :

class Solution {
    public String reverseWords(String s) {
        StringBuilder sb = trimSpace(s);

        reserve(sb,0,sb.length() - 1);

        reserveWord(sb);

        return sb.toString();
    }
    public StringBuilder trimSpace(String s){
        int left = 0;
        int right = s.length() - 1;
        //去除前面空格
        while(left <= right && s.charAt(left) == ' '){
            left++;
        }
        //去除后面空格
        while(left <= right && s.charAt(right) == ' '){
            right--;
        }

        StringBuilder sb = new StringBuilder();
        while(left <= right){
            char a = s.charAt(left);

            if(a != ' '){
                sb.append(a);
            }else if(sb.charAt(sb.length() - 1) != ' '){
                sb.append(a);
            }

            left++;
        }
        return sb;
    }
    public void reserve(StringBuilder sb,int left,int right){
        while(left < right){
            char temp = sb.charAt(left);
            sb.setCharAt(left++,sb.charAt(right));
            sb.setCharAt(right--,temp);
        }
    }
    public void reserveWord(StringBuilder sb){
        int right = sb.length() - 1;
        int start = 0;
        int end = 0;
        while(start <= right){
            while(end <= right && sb.charAt(end) != ' '){
                end++;
            }
            reserve(sb,start,end - 1);
            start = end + 1;
            end++;
        }
    }
}

这期就到这里 , 下期见!

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

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

相关文章

【MATLAB】全网入门快、免费获取、持续更新的科研绘图教程系列1

1 【MATLAB】科研绘图第一期点线图 %% Made by Lwcah %% 公众号&#xff1a;Lwcah %% 知乎、B站、小红书、抖音同名账号:Lwcah&#xff0c;感谢关注~ %% 更多MATLABSCI绘图教程敬请观看~%% 清除变量 clc; clear all; close all;%% 一幅图的时候figureWidth 8.5;figureHeight …

AI:87-基于深度学习的街景图像地理位置识别

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

VR云游:让旅游产业插上数字化翅膀,打造地方名片

自多地入冬降温以来&#xff0c;泡温泉成了许多人周末度假的选择&#xff0c;在气温持续走低的趋势下&#xff0c;温泉游也迎来了旺季&#xff1b;但是依旧有些地区温度依旧温暖&#xff0c;例如南京的梧桐美景也吸引了不少游客前去打卡&#xff0c;大家穿着汉服与金黄的树叶合…

【Hello Go】Go语言并发编程

并发编程 概述基本概念go语言的并发优势 goroutinegoroutine是什么创建goroutine如果主goroutine退出runtime包GoschedGoexitGOMAXPROCS channel无缓冲的channel有缓冲的channelrange和close单向channel 定时器TimerTicker Select超时 概述 基本概念 并行和并发概念 并行 &…

佳易王个体诊所病历登记系统查询软件教程

佳易王个体诊所病历登记系统查询软件教程 在开处方时可以随时查看该病人的历史病历。 软件功能&#xff1a; 1、配方模板&#xff1a;可以自由添加配方分类&#xff0c;预先设置药品配方&#xff0c;可以一键导入电子处方。 2、正常开药&#xff1a;可以灵活选择药品&#x…

什么是持续集成的自动化测试?

持续集成的自动化测试 如今互联网软件的开发、测试和发布&#xff0c;已经形成了一套非常标准的流程&#xff0c;最重要的组成部分就是持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff0c;目前主要的持续集成系统是Jenkins&#xff09;。 那么什么是持…

【图文详解】SiamFC++与图注意力的强强联合:单目标追踪系统

1.研究背景与意义 随着计算机视觉技术的不断发展&#xff0c;单目标追踪&#xff08;Single Object Tracking, SOT&#xff09;作为计算机视觉领域的一个重要研究方向&#xff0c;已经在许多实际应用中得到了广泛的应用。单目标追踪系统可以通过分析视频序列中的目标运动&…

【Typroa使用】Typroa+PicGo-Core(command line)+gitee免费图片上传配置

TyproaPicGo-Core(command line)gitee免费图片上传配置 本文是在win10系统下配置typroapicGo-Core(command line)gitee图片上传的教程。需要的环境和工具有&#xff1a; gitee账号&#xff0c;新建仓库及token令牌&#xff1b;已经安装了的typroa&#xff0c;需要0.9.98版本以上…

Python 字典(dict)基础学习

一、字典的基础定义(key:value)键值对 my_dict {"王力宏": 99, "周杰伦": 88, "林俊杰": 77} my_dict2 {} my_dict3 dict() print(my_dict) print(my_dict2) print(my_dict3) 字典基础定义 字典名 {key1:value1,key2:value2,key3:value3}…

shell 脚本的函数和数组

函数 —— 封装的一个公式&#xff1a;sin、cos、tan —— 函数为脚本的别名 —— 函数就是一个功能模块&#xff0c;在函数中写执行的命令即可&#xff1b;使用函数可以避免代码重复&#xff0c;增加可读性&#xff0c;简化脚本&#xff0c;使用函数可以将大的工程分割为若…

【C++初阶】STL详解(六)Stack与Queue的介绍与使用

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

UE5 中的computer shader使用

转载&#xff1a;UE5 中的computer shader使用 - 知乎 (zhihu.com) 目标 通过蓝图输入参数&#xff0c;经过Compture Shader做矩阵运算 流程 1. 新建插件 2. 插件设置 3. 声明和GPU内存对齐的参数结构 4. 声明Compture Shader结构 5. 参数绑定 6. 着色器实现 7. 分配 work gr…

【Spring】 IoCDI

回顾 企业命名规范 大驼峰:BookDao(首字母都大写) 类名 小驼峰:bookDao(第一个字母小写) 方法名 蛇形:book_dao(小写下划线_) 数据库 串形:book-dao(小写连字符-) 项目文件夹 各种注解 学习Spring MVC, 其实就是学习各种Web开发需要⽤的到注解 a. RequestMapping: 路由…

计算机中文编程工具构件之透明按钮,编程工具下载,零基础自学编程

计算机中文编程工具构件之透明按钮&#xff0c;编程工具下载&#xff0c;零基础自学编程 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&am…

HashML——让更多企业读懂数据,用好AI

随着大模型技术的兴起&#xff0c;数据智能和AI正成为企业数字化转型的新驱动力。 酷克数据研发推出的新一代高级分析和数据科学工具箱HashML自推出以来&#xff0c;受到了众多企业和技术爱好者的广泛关注。在最近的直播中&#xff0c;我们邀请了HashData的数据科学工程师&…

目标检测算法 - YOLOv3

文章目录 1. Backbone Darknet-532. 整体架构3. 损失函数4. 训练过程5. 预测过程 YOLOv1、YOLOv2都是在CVPR这种正规的计算机视觉学术会议上发表的正式学术论文。 YOLOv3不算一篇严谨的学术论文&#xff0c;是作者随笔写的技术报告。 YOLOv3性能&#xff1a; 1. Backbone Dark…

七要素微气象仪气象数据监测助手

WX-WQX7 随着科技的发展&#xff0c;气象预测的准确性已成为人们日常生活的重要参考。而七要素微气象仪&#xff0c;作为新型的气象探测设备&#xff0c;以其精细化的数据测量和解析能力&#xff0c;正在改变我们的天气预测方式。 一、产品介绍 七要素微气象仪是一款集成了温…

STM32:基本定时器原理和定时程序

一、初识定时器TIM 定时器就是计数器&#xff0c;定时器的作用就是设置一个时间&#xff0c;然后时间到后就会通过中断等方式通知STM32执行某些程序。定时器除了可以实现普通的定时功能&#xff0c;还可以实现捕获脉冲宽度&#xff0c;计算PWM占空比&#xff0c;输出PWM波形&am…

TEMU平台商品欧盟站要求电子和电气产品提供CE-EMC(Electric)资质

CE-EMC认证是欧盟对于市场上销售的电子和电气产品所要求的一个重要认证标准。该认证指令规定了产品在电磁环境下的辐射和抗干扰性能要求&#xff0c;以确保产品在使用时不会对其他设备和系统产生干扰&#xff0c;并且能够正常工作&#xff0c;不受其他设备的干扰。 CE EMC认证…

【机器学习 | 白噪声检验】检验模型学习成果 检验平稳性最佳实践,确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…