【算法】-- 【字符串反转】

详解反转字符串算法题 反转字符串,是经常出现的一种算法题,使用C/C++语言时,通常要求在原地进行反转。 最直接的反转整个字符串,使用的是一前一后双指针的方法 进阶的翻转,同要要涉及到两个指针,只是两个指针就行局部反转 进阶题目: 给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k ... 阅读详情

如何将字符串反转?

/**
     * 二分递归地将后面的字符和前面的字符连接起来。
     *
     * @param s
     * @return
     */
    public static String reverse1(String s) {
        int length = s.length();
        if (length <= 1)
            return s;
        String left = s.substring(0, length / 2);
        String right = s.substring(length / 2, length);
        return reverse1(right) + reverse1(left);
    }

    /**
     * 取得当前字符并和之前的字符append起来
     * @param s
     * @return
     */
    public static String reverse2(String s) {
        int length = s.length();
        String reverse = "";
        for (int i=0; i<length; i++)
            reverse = s.charAt(i) + reverse;
        return reverse;
    }

    /**
     * 将字符从后往前的append起来
     * @param s
     * @return
     */
    public static String reverse3(String s) {
        char[] array = s.toCharArray();
        String reverse = "";
        for (int i = array.length - 1; i >= 0; i--) {
            reverse += array[i];
        }
        return reverse;
    }

    /**
     * 和StringBuffer()一样,都用了Java自实现的方法,使用位移来实现
     * @param s
     * @return
     */
    public static String reverse4(String s) {
        return new StringBuilder(s).reverse().toString();
    }

    /**
     * 和StringBuilder()一样,都用了Java自实现的方法,使用位移来实现
     * @param s
     * @return
     */
    public static String reverse5(String s) {
        return new StringBuffer(s).reverse().toString();
    }

    /**
     * 二分交换,将后面的字符和前面对应的那个字符交换
     * @param s
     * @return
     */
    public static String reverse6(String s) {
        char[] array = s.toCharArray();
        int end = s.length() - 1;
        int halfLength = end / 2;
        for (int i = 0; i <= halfLength; i++) {
            char temp = array[i];
            array[i] = array[end-i];
            array[end-i] = temp;
        }

        return new String(array);
    }

    /**
     * 原理是使用异或交换字符串
     * a=a^b;
     * b=b^a;
     * a=b^a;
     *
     * @param s
     * @return
     */
    public static String reverse7(String s) {
        char[] array = s.toCharArray();

        int begin = 0;
        int end = s.length() - 1;

        while (begin < end) {
            array[begin] = (char) (array[begin] ^ array[end]);
            array[end] = (char) (array[end] ^ array[begin]);
            array[begin] = (char) (array[end] ^ array[begin]);
            begin++;
            end--;
        }

        return new String(array);
    }

    /**
     * 基于栈先进后出的原理
     *
     * @param s
     * @return
     */
    public static String reverse8(String s) {
        char[] array = s.toCharArray();
        Stack<Character> stack = new Stack<Character>();
        for (int i = 0; i < array.length; i++)
            stack.push(array[i]);

        String reverse = "";
        for (int i = 0; i < array.length; i++)
            reverse += stack.pop();

        return reverse;
    }

    public static void main(String[] args) {
        System.out.println(reverse1("Song ChengZhi"));
        System.out.println(reverse2("Song ChengZhi"));
        System.out.println(reverse3("Song ChengZhi"));
        System.out.println(reverse4("Song ChengZhi"));
        System.out.println(reverse5("Song ChengZhi"));
        System.out.println(reverse6("Song ChengZhi"));
        System.out.println(reverse7("Song ChengZhi"));
        System.out.println(reverse8("Song ChengZhi"));
    }
TypeScript算法题实战——字符串篇(字符串的反转、旋转、查询、KMP算法) 字符串操作是算法题中的常见考点,它们直接测试开发者对字符串类型的理解和灵活运用。字符串问题不仅基础且多样,还能延伸到动态规划、贪心算法和高级数据结构的应用。字符串的翻转、反复、旋转、替换、查询、KMP查找子串等都是很经典的题目。掌握字符串的核心操作和优化技巧,是算法学习中的必备技能。 阅读详情

相关推荐

C# 字符串反转算法实现

在 C# 中,字符串是不可变的,这意味着一旦创建了一个字符串对象,它的值就不能被修改。如果我们想要反转一个字符串,我们需要使用算法来创建一个新的反转后的字符串。StringBuilder 类是一个可变的字符串容器,它提供了一些方便的方法来操作字符串。通过从后向前遍历输入字符串,我们实现了字符串的反转。这种方法涉及将字符串转换为字符数组,然后使用指针或循环交换字符的位置,最后将字符数组转换回字符串。指向的字符,我们实现了字符串的反转。方法从字符串的开头插入字符,从而实现字符串的反转。然后,我们使用两个指针。

与其临渊羡鱼,不如退而结网 395

字符串反转的9种方法

1. 使用Array.Reverse方法 对于字符串反转,我们可以使用.NET类库自带的Array.Reverse方法 public static string ReverseByArray(string original) { char[] c = original.ToCharArray(); Array.Reverse(c); return new string(c); }

迷之月光的专栏 1万+

STM32cube HAL库两条命令实现i2c通信---Nucleo L476RG用I2C实现tmp117模块温度读取并串口打印

Getting Started with STM32 - I2C Example

m0_54706625的博客 1830

JavaScript反向字符串– 4种方法

In this tutorial I will talk about how you can reverse a string in JavaScript language. 在本教程中,我将讨论如何使用JavaScript语言反转字符串。 This is a very popular question i.e. asked in interviews. There are many ways...

culing2941的博客 2023

postman响应体:“msg“: “请求缺失签名Sign“、 “msg“: “请求缺失时间戳“

请求标头有Sign、Timestamp,但是直接将网址复制到postman时,Headers没有自动生成这两个参数,所以运行时会报错。

m0_46862648的博客 1706

RTC时钟芯片替换代码移植-IIC通信

1、问题 RTC时钟芯片由爱普生RX-8010SJ更换成大普INS5710A,两者都是IIC通信,更换大普芯片后时钟不走、以及报掉电错误。仿真分析原因是CPU和RTC芯片收发数据延时不够导致,根据爱普生芯片手册,8010收发数据不采取延时,但大普芯片采用同样方式读取不行(需要加延时) 2、RX-8010SJ手册说明(以读取数据为例) (1)寄存器读操作时序图 指定地址读操作: 1)CPU 发送开始条件[S] 2)CPU 传输RX-8010SJ 的从地址,用R/W 位设定写模式 3)检测从RX-8010

weixin_42851683的博客 2065

数据结构与算法之字符串反转

字符串反转是一个常见的算法问题,可以用多种方法实现。下面介绍几种实现字符串反转的常见算法。在Java等语言中,字符串是一个字符数组。我们可以通过访问和修改数组元素来反转字符串。例如,可以首先将字符串转换为字符数组,然后使用从首尾两端遍历数组的循环,交换数组元素的位置实现字符串反转。StringBuilder是一个可变的字符序列,可以方便地进行字符串操作。我们可以使用StringBuilder的reverse()方法来实现字符串反转。

weixin_47225948的博客 546

PCIe信号眼图总是不开?手把手教你调CTLE和DFE参数(附实测波形对比)

本文详细解析了PCIe信号眼图调试中CTLE和DFE参数的优化方法,帮助硬件工程师解决眼图无法张开的问题。通过实际案例和步骤指导,介绍了如何调整CTLE直流增益和DFE抽头系数,提升接收端均衡器性能,确保信号完整性。

weixin_26805597的博客 213

Java反向字符

Java反向字符串简介 字符串是一个字符序列,是Java中的一个对象。在Java中,可以对String对象执行几种操作。常用的操作之一是字符串反转。反向的字符串称为反向字符串。例如,“ HAPPY”字符串可以反转为“ YPPAH”。同样,当反转时,“ LUCKY”字符串可以写为“ YKCUL”。 Java中反向字符串背后的逻辑 有几种方式可以反转字符串。对于每种方法,将使用单独的功能和循环。即使方法不同,字符串反转背后的基本过程也几乎类似,下面将对此进行介绍: 使用代码或使用用户输入来输入字符.

allway2的博客 2004

CoaXPress FMC子卡:高速图像采集与FPGA原型开发实战指南

在机器视觉和工业检测领域,高速、可靠的数据传输是核心需求。CoaXPress(CXP)协议作为一种基于同轴电缆的高速接口标准,通过其高带宽、长距离传输和低延迟的特性,有效解决了传统接口在确定性实时传输方面的短板。其技术价值在于为海量图像数据提供了稳定、高效的物理层和数据链路层解决方案,广泛应用于半导体检测、医疗成像等对吞吐量有极致要求的场景。要实现CXP系统的快速原型验证,集成了高速SerDes接口和时钟管理的FMC子卡与FPGA开发板的组合成为关键。这种平台将复杂的硬件设计封装,让开发者能聚焦于图像处理算

weixin_31815843的博客 278

DeepSpeed Zero3 Offload实战:从GCC版本检查到环境配置的完整避坑指南

本文是一份针对DeepSpeed Zero3 Offload部署的完整避坑指南。针对训练中常见的`AttributeError: ‘DeepSpeedCPUAdam‘ object has no attribute ‘ds_opt_adam`报错,文章深入剖析了其根源在于GCC编译器版本过低。指南提供了从系统GCC版本深度探查、安全启用高版本GCC环境,到DeepSpeed一致性安装验证的全链路实战方案,旨在帮助用户构建稳定的大模型训练环境。

weixin_29070721的博客 473

输入一个字符,把他反向显示

3、reverseB(s)因为是range是正向统计的,所以我们 t = s[i]+t:把查的字符放第一个输出。2、reverseA(s)因为是range是反向统计的,所以我们 t = t+s[i]:把查的字符放在后面输出。1、反向:那我们就离不开统计和识别输入了什么,就用到 "len()" 和 " for "

小白 709

2026年数字IC设计华为笔试带答案解析

这篇文章是一份数字IC设计工程师笔试的试卷结构和部分题目解析。试卷包含单选题31题(每题2分)、多选题10题(每题4分)和简答/编程题4题(每题7分),总分130分,考试时长120分钟。 摘要重点: 试卷涵盖数字IC设计的关键知识点,包括Verilog语法、时序逻辑、状态机设计、跨时钟域处理等; 题目解析详细说明了各选项的正确性,如非阻塞赋值特性(D错误)、功耗影响因素(C与组合逻辑级数弱相关)等; 包含实际工程问题,如DDR4接口电平(SSTL-1.2)、卡诺图变量排序(格雷码)等; 部分题目考察基础概念

Open 368

算法题:字符串反转集合

看到网上的面经,有下面这样一道算法题。我看到第一眼有那么点思路的,必须要自己code下。 给定一个字符串S = “I am a student”,使其成为"student a am I" 首先先反转整个字符串,再局部反转 遍历反转后的字符串,为空时将单词反转,还有一种情况是j = s.length时反转最后一个单词 虽然有两个While循环,但时间复杂度仍为O(n),目的是为了执行j = s.length时反转最后一个单词 时间复杂度为O(n),空间复杂度为O(1) public String re

qq_34795226的博客 439

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

算法日记day 10(反转字符串)

重难点在于如何去处理空格的问题,既要保证单词的反转,也要保证每个单词之间只能保留有一个空格,其余的空格均需删除,因此需要有专门的删除空格的方法,采用双指针的方法去删除多余的空格,专门的反转单词的方法,需要先将整个字符串s整体反转,再分别对各个单词进行反转,因此需要完成两个反转方法。反转字符串中有很多细节上的问题,从整个字符串反转,再到分别划分区域的反转,这不仅仅需要对代码基本功足够扎实,同时还需要有较为缜密的逻辑,多花点时间去做去想,日积月累,一定可以有所收获!反转后的字符串中不能存在前导空格和尾随空格。

m0_74980681的博客 954

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【算法系列-字符串】反转字符串中的单词

【算法系列-字符串】反转字符串中的单词

Mwt258的博客 861

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【算法-字符串1】反转字符串 + 反转字符串2

简单的字符串操作,看看你会吗?

BaconZzz的博客 462

递归算法_字符串反转_20230412

递归算法,字符串反转,C语言

Jasonchen1224的博客 2461

算法刷题-字符串-反转字符串

打基础的时候,不要太迷恋于库函数。

lw的博客 1421

【算法day8】字符串:反转

今天的题目比较简单,但其实很多细节需要掌握,例如第一题的去除多余空格的那一步…明天见~

Hamdh的博客 939

算法训练营day08(字符串01:反转字符串,反转字符串2,替换数字,反转字符串里的单词,右旋转字符串)

if( chars[fast] == ' '){//遇到空格啥都不用管直接fast++,非空格就继续操作,其实if可以直接写非空格的情况。= 0){//如果slow在最开始,不用加空格;//1.移除多余空格,快指针只保留非空字符,慢指针判断接收快指针指向字符的时候要不要加一个空格。//news是char[]不是字符串,需要用String(char[]转换成字符串。//fast

weixin_61931006的博客 834

字符串反转算法

问题:给定一个字符串,然后通过一定的算法进行反转。如”jaghaoie”反转之后为”eioahgaj”解决方式:递归解决思路:截取字符串第一个字符拼接到截取之后的字符串末尾,直到截取之后的字符串长度为0用到的String类的方法: substring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。 concat(String str)

c_87_84的博客 616

【算法】反转字符串

前言研究算法能提高我们的编程功底,更好地编写出高效稳健的代码。今天,我们研究的是 — 反转字符串。//输入一个字符串,输出它的倒序字符串 input: Hello output: olleH解法反转字符串,确实没什么难度,但是我无意间搜索了一下,才发现这么一个看似简单的反转算法实现起来真可谓花样繁多。这里我们尽可能分别总结介绍一下。1、使用字符数组倒序输出最常规的解法,也是最容易想到的一种方法就是

Mlib 3815

【算法系列-字符串】反转字符串

欢迎来到【算法系列-字符串】第四弹 🏆,接下来我们将围绕字符串这类型的算法题进行解析与练习!一起加油吧!!( •̀ ω •́ )✧✨

Mwt258的博客 753

算法探索_反转字符串

问题描述: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 示例 1: 输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"]示例 2: 输入:["H","a","n","n","a","h"] 输出:["h","a","n","n","a",

赵星海 216
上一篇: 详解ArrayList、LinkedList和Vector的源码解析
下一篇: 【算法】-- 【单链表的反转、增删、去重、中间节点、是否有环、有环的第一个节点、是否相交等】
春来桃花开
博客等级 码龄10年 21粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值