字符串操作题

今天解决了这样的一道题:

有这样的一个字符串”:ab:cde:fghi:jklmn:::12345::A”,给每个冒号间隔的字符串片段逆序排列,
即输出”:ba:edc:ihgf:nmlkj:::54321::A”,写出代码。

经过室友点拨,这道题可以分为先检索字符串片段,对片段进行逆序操作。即检索第一组片段,逆序;检索第二组片段,逆序;……。故采用递归思想,函数应包含两个步骤,第一步是检索字符串片段,第二部对该片段逆序排列。在花费大量时间后,一个是解决了这个问题,另外一个是暴露了自己基础极差的状态。

我是学Java的,用Java实现,以下是代码:

public class RecursionDepth {
    static void func(StringBuffer strs, int count) {
        if (count > strs.length()-1) {
            return;
        }
        if (String.valueOf(strs.charAt(count)).equals(":")) {
            count++;
        } else {
            int i = 0;
            while(!String.valueOf(strs.charAt(count)).equals(":")) {
                count++; //字符串片段计数器
                if  (count == strs.length()) {
                    break; //字符串末尾跳出
                }
                if (String.valueOf(strs.charAt(count)).equals(":")) {
                    break; //字符串片段结束跳出
                }
                i++; //超过两个字符的字符串片段计数加1
            }
            int j = 1; //临时计数器
            while (i>-1 && j<=i) {
                String left = String.valueOf(strs.charAt(count-i-1));
                String right = String.valueOf(strs.charAt(count-j));
                strs.replace(count-i-1, count-i, right);
                strs.replace(count-j, count-j+1, left);
                i--;
                j++;
            }
        }
        func(strs, count);
    }

    public static void main(String[] args) {
        StringBuffer  strs = new StringBuffer (":ab:cde:fghi:jklmn:::12345::A");
        int count = 0; //字符串定位
        func(strs, count);
        System.out.println(strs);
    }

}

思路虽然很好理解,但是自己动手敲的时候暴露了这么几个问题。

  1. 首先对Java的字符串不理解,导致面对String,不知道该如何操作其中的字符,通过百度才知道StringBuffer的replace()方法才可以替换制定位置。
  2. 字符串逆序操作一开始想通过逐个替换,有i个字符即需要(i-1)*i/2次,接着写代码的时候发现很难写出来(主要是不想再用变量),后来经过大量的时间思考逆序只需要首尾替换即可,才写出这样的代码。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值