将一个字符串中指定位置进行反转

1.将String中指定位置进行反转

1.1问题阐述

举个例子:“abcdefg”字符串中指定2到5号位置进行反转,-------》"abfedcg"

1.2问题解决思路

    如果题目阐述全部进行反转:则直接调用StringBuffer类里面的reverse()方法即可,但现在需要有指定位置,所以我们需要自己实现,调用String里面的相关方法,我们有如下3个解决思路:

思路一

我们可以将“abcdefg”先转换为字符数组,调用tocharArray()方法,保存在一个arr数组里面,然后在arr数组里面从指定位置2开始,将2赋值给start,5赋值给end,将2号和5号位置交换,即start和end交换,然后start++,end--,直到srart>end

下面我们来看下整体的代码:

public String reverse(String str,int start,int end){
        if (str == null||str.length() == 0){
            return null;
        }
        char[] arr = str.toCharArray();//将字符串转换为字符数组
        for (int x = start, y= end;x< y;x++,y--){
            char tmp = arr[x];
            arr[x] = arr[y];
            arr[y] = tmp;
        }
        return new String(arr);
    }
测试用例:
       String str = "abcdefg";
        String reverse = reverse2(str, 2, 5);
       System.out.println(reverse);

运行结果:将一个字符串中指定位置进行反转

思路二:

思路一里面没有用到String类给我们提供的方法,而且,开辟了一个char类型数组,浪费了内存空间。基于这些弊端,在思路二中,我们调用String类提供的方法,比如:字符串"abcdef",从2到5进行反转,先用方法subString(0,2)获取到“ab”,赋值给sub因为左闭右开,不包括2号索引下标,没有字符c,然后从5号下标开始往前进行for循环,用charAt()方法进行获取i号下标的元素,并拼接到sub,最后将剩余的5+1号到结束的字符串用substring()方法拼接给sub。

下面我们来看下代码:

public String reverse1(String str,int start,int end){
        if (str == null||str.length() == 0){
            return null;
        }
        String substring = str.substring(0, start);
        for (int i = end;i>=start;i--){
            substring += str.charAt(i);
        }
        substring += str.substring(end+1);
        return substring;
    }
测试用例:
       String str = "abcdefg";
        String reverse = reverse2(str, 2, 5);
       System.out.println(reverse);

运行结果:

将一个字符串中指定位置进行反转

思路三

思路三是在思路二的基础上稍作改进,因为我们知道,String类是不可变的序列,每次执行拼接操作时,都要重新开辟内存进行新造,而StringBuilder类是可变的字符序列,每次执行拼接操作时,不用新开辟内存,直接往数组后面拼接。与思路二的思路是一样的

只是更加节省内存空间,下面我们来看下代码:

 public String reverse2(String str,int start,int end){
        if (str == null||str.length()==0){
            return  null;
        }
        StringBuilder builder = new StringBuilder(str.length());
        builder.append(str.substring(0,start));
        for (int i = end;i>=start;i--){
            builder.append(str.charAt(i));
        }
        builder.append(str.substring(end+1));
        return builder.toString();
    }
测试用例:
       String str = "abcdefg";
        String reverse = reverse2(str, 2, 5);
       System.out.println(reverse);

运行结果:

将一个字符串中指定位置进行反转

                                              谢谢浏览!

 

 

 

 

 

 

上一篇:Leetcode 392: Is Subsequence


下一篇:HDU6988 - Display Substring