320反转字符串

Posted huoyingfans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了320反转字符串相关的知识,希望对你有一定的参考价值。

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

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
 

提示:

1 <= s.length <= 105
s[i] 都是 ASCII 码表中的可打印字符

来源:力扣(LeetCode)
链接:力扣
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.string;

/**

 * 反转字符串 <br/>

 *

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

 *

 * 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

 *

 * 来源:力扣(LeetCode) 链接:力扣

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 *

 * @author wen.lei@brgroup.com

 *

 *         2022-1-28

 */

public class ReverseString

    // 示例 1:

    // 输入:s = ["h","e","l","l","o"]

    // 输出:["o","l","l","e","h"]

    // 示例 2:

    // 输入:s = ["H","a","n","n","a","h"]

    // 输出:["h","a","n","n","a","H"]

    public void reverseString(char[] s)

        if (s == null || s.length <= 1)

            return;

        

        int maxIndex = s.length / 2;

        char tmp = 0;

        int endIndex = s.length - 1;

        for (int index = 0; index < maxIndex; index++)

            //找对称的位置

            int swapIndex = endIndex- index;

            swap(s, index, swapIndex,tmp);

        

    

    /**

     * 交换数组中的2个元素,要求空间O(1),传过来。子方法,确保代码清晰

     * @param s

     * @param swapIndex1

     * @param swapIndex2

     * @param tmp

     */

    private void swap(char[] s, int swapIndex1, int swapIndex2, char tmp)

        if (s == null)

            throw new NullPointerException("char array is null");

        

        if (swapIndex1 < 0 || swapIndex1 > s.length - 1)

            throw new IllegalArgumentException("swapIndex1 out of bound");

        

        if (swapIndex2 < 0 || swapIndex2 > s.length - 1)

            throw new IllegalArgumentException("swapIndex2 out of bound");

        

        if(swapIndex1 == swapIndex2)

            return;

        

        tmp = s[swapIndex1];

        s[swapIndex1]=s[swapIndex2];

        s[swapIndex2]=tmp;

    

package test.leecode.string;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.string.ReverseString;

/**

 * @author wen.lei@brgroup.com

 *

 * 2022-2-11

 */

public class ReverseStringTest

    @Test

    public void test()

        ReverseString rs = new ReverseString();

        final String helloWorldStr = "helloWorld";

        char[] helloWorld = helloWorldStr.toCharArray();

        char[] helloWorldReverse = "dlroWolleh".toCharArray();

        final String iEnjoyCodingStr = "iEnjoyCoding";

        char[] iEnjoyCoding = iEnjoyCodingStr.toCharArray();

        char[] iEnjoyCodingdReverse = "gnidoCyojnEi".toCharArray();

        final String iAmHappyStr = "我刷题我快乐";

        char[] iAmHappy = iAmHappyStr.toCharArray();

        char[] iAmHappydReverse = "乐快我题刷我".toCharArray();

        rs.reverseString(helloWorld);

        Assert.assertArrayEquals(helloWorldReverse,helloWorld);

        rs.reverseString(iEnjoyCoding);

        Assert.assertArrayEquals(iEnjoyCodingdReverse,iEnjoyCoding);

        rs.reverseString(iAmHappy);

        Assert.assertArrayEquals(iAmHappydReverse,iAmHappy);

        rs.reverseString(iAmHappy);

        final String iStr = "我";

        char[] i=iStr.toCharArray();

        rs.reverseString(i);

        Assert.assertArrayEquals(iStr.toCharArray(),i);

    

以上是关于320反转字符串的主要内容,如果未能解决你的问题,请参考以下文章

快慢指针和链表原地反转

LeetCode 0189. 轮转数组:额外空间 / 原地反转

反转字符串

给定一个数组实现反转,要求原地实现

Alogorim:链表原地反转Demo

反转字符串