【算法-Java实现】去除字符串中的重复字符
一.问题描述:
1.输入:输入一个String字符串str。
2.输出:去除这个字符串str的重复字符,按照字符出现的顺序输出这个无重复的字符串result。
比如:
输入:“hkdhkdhkd” 输出:“hkd”
输入:“abbbcccd” 输出:“abcd”
输入:“wxhxy” 输出:“wxhy”
二.问题解答:
1.首先,按照上面给出的输入输出案例,我们知道,得到的输出结果字符串result长度是不固定的,这取决于输入字符串str,因此要将结果存储在StringBuffer字符串sb中(长度可变的缓冲区字符串)。
2.思路:我们要拿出str中每一个字符进行判断,因此for循环依次遍历字符串,需要使用str.charAt(int index)方法拿出每一个字符c;问题关键在于如何判断呢?
以输入“abbbcccd”为例,我们可以使用indexOf(char ch)、lastIndexOf(char ch)进行等值比较。若该字符的第一个索引位置和最后一个索引位置相同,则表示该字符只出现一次,将该字符存入sb中,比如‘a’;若该字符的第一个索引位置和最后一个索引位置不同,则表示该字符至少出现两次,比如‘b’,因为我们只要存第一个‘b’即可,所以当str.indexOf(c)==i时,将该字符存入sb中,否则不存储。字符’c’和字符‘d’操作同上。
三.算法分析:
1.时间复杂度O(N),额外空间复杂度O(1)。
代码如下
import java.util.*;
public class Solution {
/**
* 去除字符串中的重复字符
* @param str string字符串
* @return string字符串
*/
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.nextLine();
String result=removeDuplicatedChars ( str);
System.out.println(result);
}
public static String removeDuplicatedChars (String str) {
// write code here
StringBuffer sb=new StringBuffer();
for(int i=0;i<str.length();i++) {
//依次拿出每一个字符
char c=str.charAt(i);
//该字符的第一个索引位置和最后一个索引位置相同,表示只出现一次
if(str.indexOf(c)==str.lastIndexOf(c)) {
sb.append(c);
}else {
//该字符的第一个索引位置和最后一个索引位置不同
if(str.indexOf(c)==i) {
sb.append(c);
}
}
}
String result=new String(sb);
return result;
}
}