【算法-Java实现】去除字符串中的重复字符

【算法-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;
    }
}

猜你喜欢

转载自blog.csdn.net/hkdhkdhkd/article/details/109249986