删除并统计数组中重复的字符

写一个方法deleteRepeats()用来统计并删除字符数组中某段重复的字符。这个函数有两个参数
第一个参数是数组,第二个参数是指定的范围。如下所示
执行前:
char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'a';
a[3] = 'c';
int size = 4;  //size代表数组中已经被填充的范围
size = deleteRepeats(a, size);
当这个函数执行后,
a[0] 的值为 'a';
a[1] 的值为'b';
a[2] 的值为'c';
size等于3,被删除的a[3]不用去关注了。
要求该方法返回重复的字符个数。
假设该数组中的字符都是小写字母。
在main方法中测试该函数。

//实在是妙不可言,都怀疑自己的智商了。呵呵,要是老有那么聪明,那就一切都好办了!

package ch03;

public class DeleteCharArrRepeats {
    public static void main(String[] args) {
        char[] charArr=new char[10];
        charArr[0]='a';
        charArr[1]='b';
        charArr[2]='c';
        charArr[3]='a';
        charArr[4]='a';
        charArr[5]='z';
        int size=6;
        System.out.println("原字符数组的实际长度:"+size);
        System.out.println(charArr);
        System.out.println("-----------------------------");
        System.out.println("重复字符的个数为:"+deleteRepeats1(charArr,size));
        System.out.println(charArr);
    }
    /**
     * 第1种删除字符数组内重复字符的方法, 有点像排序, 很小很强大
     */
    public static int deleteRepeats1(char[] charArr,int size) {
        int repeatCount=0;
        for(int i=0;i
            for(int j=i+1;j
                if(charArr[j]==0){
                    break;
                }
                if(charArr[j]==charArr[i]){ //1.abc0az
                    charArr[j]=0;            //2.abc00z
                    repeatCount++;            //3.abc0z0
                }                            //4.abcz00
                if(charArr[j-1]==0){       
                    charArr[j-1]=charArr[j];
                    charArr[j]=0;
                }
            }
        }
        return repeatCount;
    }
    /**
     * 第2种删除字符数组内重复字符的方法, 以字符串作媒介,替换其中的重复字符为空,再回传
     */
    public static int deleteRepeats2(char[] charArr,int size) {
        String str=new String(charArr);
        for(int i=0;i
            String frontStr=str.substring(0,i+1);
            String backStr=str.substring(i+1);
            String seekChar=str.substring(i,i+1);
            backStr=backStr.replace(seekChar, "");
            str=frontStr+backStr;
        }
        //此处无法直接赋值, 折腾我一晚上
        char[] tempArr=str.toCharArray();
        for(int i=0;i
            charArr[i]=i
        }
        return str.length()-1;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值