(算法)去除字符串中的重复字符(时间复杂度)
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。