(算法)去除字符串中的重复字符(时间复杂度)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(算法)去除字符串中的重复字符(时间复杂度)相关的知识,希望对你有一定的参考价值。

参考技术A 1.一般会想到遍历字符串,去除重复的字符,这样时间复杂度是O(n²),时间复杂度太高。

static String sub(String str)

StringBuffer result =newStringBuffer();

List list =new ArrayList();

char[] cs = str.toCharArray();

for(int i=0; i<cs.length; i++)

if(!list.contains(cs[i]))

result.append(cs[i]);

list.add(cs[i]);





returnresult.toString();



2.再仔细想一想

用java的String的indexOf方法来达到字符串去重的目的,indexOf的功能是返回指定字符在此字符串中第一次出现处的索引:

public static String QuChong(String str)

        StringBuilder sb=new StringBuilder();

        for(int i=0;i<str.length();i++)

            if(str.indexOf(str.charAt(i))==i)

                //第一次出现

                sb.append(str.charAt(i));

           

       

        String result=sb.toString();

        return result;

   

怎么去掉字符串中重复出现的字符

参考技术A lz 你好

这个就是一个比较简单的算法题 , 你可以自己写

但是用Java语言就不需要了 , Java自带泛型相关的类 , 很有用

其中TreeSet集合能自动识别添加的是否重复 , 重复的将不会添加 , 很方便

以下是实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.List;
import java.util.Scanner;

public class DeleteRepeated
private String str;
private TreeSet noReapted;//带有String类型的TreeSet泛型

public DeleteRepeated()
Scanner in = new Scanner(System.in);

System.out.println ("输入一个字符串:");
str = in.nextLine();

noReapted = new TreeSet();


//清楚重复的数据
public void removeRepeated()
for (int i = 0; i < str.length(); i )
noReapted.add("" str.charAt(i));
//str.charAt(i)返回的是char型 所以先加一个""空格 , 转换成String型
//TreeSet泛型能保证重复的不加入 , 而且有序


str = "";

for(String index:noReapted)
str = index;


//输出
System.out.println (str);


public static void main(String[] args)
DeleteRepeated dr = new DeleteRepeated();

dr.removeRepeated();

参考技术B 参考代码:
import java.util.List;
import java.util.Scanner;

public class DeleteRepeated
private String str;
private TreeSet<String> noReapted;//带有String类型的TreeSet泛型

public DeleteRepeated()
Scanner in = new Scanner(System.in);

System.out.println ("输入一个字符串:");
str = in.nextLine();

noReapted = new TreeSet();


//清楚重复的数据
public void removeRepeated()
for (int i = 0; i < str.length(); i++)
noReapted.add(""+str.charAt(i));
//str.charAt(i)返回的是char型 所以先加一个""空格 , 转换成String型
//TreeSet泛型能保证重复的不加入 , 而且有序


str = "";

for(String index:noReapted)
str += index;


//输出
System.out.println (str);


public static void main(String[] args)
DeleteRepeated dr = new DeleteRepeated();

dr.removeRepeated();

本回答被提问者采纳

以上是关于(算法)去除字符串中的重复字符(时间复杂度)的主要内容,如果未能解决你的问题,请参考以下文章

2021-08-31:去除重复字母。给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。力扣316。

算法的时间复杂度

关于时间复杂度~

java如何去除字符串中重复的字符

怎么去掉字符串中重复出现的字符

在Python中从字符串中去除数字[重复]