java—去除字符串重复字符 利用Java数据结构的特性避免O(N^2)的解法

 1 public class Test {  
 2     public static void main(String[] args) {  
 3         String s = "xXccxxxXX";  
 4         // 从头开始查找是否存在指定的字符,索引从0开始        //结果如下   
 5         System.out.println(s.indexOf("c"));     //2  
 6         // 从第四个字符位置开始往后继续查找,包含当前位置  
 7         System.out.println(s.indexOf("c", 3));  //3  
 8         //若指定字符串中没有该字符则系统返回-1  
 9         System.out.println(s.indexOf("y"));     //-1  
10         System.out.println(s.lastIndexOf("x")); //6  
11     }  
12 }


方法1:

public static void removeMethod(String s) {
        StringBuffer sb=new StringBuffer();
        int len=s.length();
        int i=0;
        boolean flag=false;
        for(i=0; i<len;i++){
            char c=s.charAt(i);
            if(s.indexOf(c)!=s.lastIndexOf(c)){
                flag=false;
            }else{
                flag=true;
            }
            if(i==s.indexOf(c))
                flag=true;
            if(flag){
                sb.append(c);
            }
        }
        System.out.print(sb.toString());
}


结果:0123456789




方法2:TreeSet


//1.将字符串循环添加到TreeSet中

String str="01211113477440000447756677899123";
TreeSet<String> ts=new TreeSet<String>();
 int len=str.length();
for(int i=0;i<len;i++){
ts.add(str.charAt(i)+"");
}

2.循环遍历TreeSet
Iterator<String> i=ts.iterator();
StringBuilder sb=new StringBuilder();
while(i.hasNext()){
sb.append(i.next());
}


3.输出结果
System.out.println(sb.toString());//0123456789



注:Set描述

Collection的子接口之Set接口
Set描述
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。


Set接口之HashSet
此类实现 Set接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。


HashSet简单使用
public static void main(String[] args) {
HashSet<String> hs=new HashSet<String>();
hs.add("aaaa");
hs.add("aaaa");
hs.add("bbbb");
hs.add("bbbb");
hs.add("cccc");
hs.add("cccc");
hs.add("dddd");
hs.add(null);
Iterator<String> i=hs.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
输出
null
bbbb
dddd
aaaa
cccc


Set接口之TreeSet
此类实现Set接口,由二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值。


TreeSet简单使用
TreeSet<String> ts=new TreeSet<String>();
ts.add("aaaa");
ts.add("aaaa");
ts.add("bbbb");
ts.add("bbbb");
ts.add("cccc");
ts.add("dddd");
ts.add("dddd");
Iterator<String> i=ts.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
输出
aaaa
bbbb
cccc
dddd


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37730482/article/details/72483137


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值