首页 > 试题广场 >

删除重复字符

[编程题]删除重复字符
  • 热度指数:15863 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牛牛有一个由小写字母组成的字符串s,在s中可能有一些字母重复出现。比如在"banana"中,字母'a'和字母'n'分别出现了三次和两次。
但是牛牛不喜欢重复。对于同一个字母,他只想保留第一次出现并删除掉后面出现的字母。请帮助牛牛完成对s的操作。

输入描述:
输入包括一个字符串s,s的长度length(1 ≤ length ≤ 1000),s中的每个字符都是小写的英文字母('a' - 'z')


输出描述:
输出一个字符串,表示满足牛牛要求的字符串
示例1

输入

banana

输出

ban
用数组比map更高效。每个字母都可以映射到数组上,只需要26个长度就可以了。

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        
        String a = in.next();
        StringBuilder sb  = new StringBuilder();
        int[] record = new int[26];
        for(int i = 0; i < a.length(); i++){
            char c = a.charAt(i);
            if(record[c-97] == 0){
                sb.append(c);
                record[c-97] = 1;
            }
        }
        System.out.print(sb);
    }
}


发表于 2022-05-19 16:35:58 回复(0)
  • 用map集合做统计,如果已经出现过了就不构建字符串,否则就用StringBuilder构建字符串
import java.util.*;
public class Main
{
    public static void main(String [] args)
    {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext())
        {
            String str=sc.next();
            HashMap<String,Integer> map=new HashMap<>();
            StringBuilder sb=new StringBuilder();
            for(int i=0;i<str.length();i++)
            {
                String s=""+str.charAt(i);
                if(map.get(s)!=null)
                {
                    map.put(s,map.get(s)+1);
                }
                else
                {
                   sb.append(s);
                   map.put(s,1);
                }                           
            }
            System.out.println(sb.toString());

        }
    }
}
发表于 2020-03-29 11:29:55 回复(0)
使用一个LinkedHashSet保存原数组,去掉重复的字母,在用Iterator遍历一遍输出就可以了
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
        LinkedHashSet<String> set=new LinkedHashSet<>();
        for(int i=0;i<s.length();i++){
            set.add(s.substring(i,i+1));
        }
        Iterator<String> iterator=set.iterator();
        while(iterator.hasNext()){
            String str=iterator.next();
            System.out.print(str);
        }
    }
}
发表于 2019-12-09 09:58:12 回复(0)
JAVA  
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner (System.in);
		String str=cin.next();
		int a=str.length();
		String s="";
		String s1=String.valueOf(str.charAt(0))+s;
		for(int i=1;i<a;i++) {
			if(s1.contains(String.valueOf(str.charAt(i)))==true)continue;
			else {
				s1=s1+String.valueOf(str.charAt(i))+s;
			}
		}
		System.out.print(s1);

	}

}

发表于 2019-11-05 16:39:33 回复(0)
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String str = in.next();
        char[] chs =str.toCharArray();
        boolean[] az = new boolean[26];
        String res = "";
        int index = 0;
        for(int i = 0;i<chs.length;i++){
            index = chs[i] - 'a';
            if(!az[index]){
                res = res+chs[i];
                az[index] = !az[index];
            }
        }
        System.out.println(res);
    }
}

发表于 2019-09-14 10:41:16 回复(0)

java使用HashSet保存出现过的字母。

import java.util.HashSet;
import java.util.Scanner;

public class Main {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        StringBuilder sb = new StringBuilder();
        sb.append(str);
        HashSet<Character> set = new HashSet();
        for (int i = 0; i < sb.length(); i++) {
            if (set.contains(sb.charAt(i))) {
                sb.setCharAt(i, '0');
            }
            set.add(sb.charAt(i));
        }
        System.out.println(sb.toString().replace("0", ""));
    }
}
发表于 2019-06-14 21:23:16 回复(0)
开始的思路是获取字符串里的每一个字符然后和该字符串进行匹配,
若IndexOf和LastIndexOf相等(即字符串内只有一个该字符)就删除后一个字符。
但是String里面没有删除指定下标字符的方法(其实也可以自己创建这个类..现在才想起来),
唯一能用的replaceFirst只能删除第一个出现的字符(其他都是两个删除所有指定字符),遂放弃。

现在的解题思路是用StringBuffer的append拼接字符串(数组固定长度,集合太麻烦,两者不可用)
如果字符c没在String里面出现过就拼接该字符,直到循环到String的最后一位为止。

另:判断输入是否正确用的是dowhile,即直到输入字符串长度与格式满足条件为止的循环。

发表于 2019-06-04 12:06:41 回复(0)
private static String solution(String str) {
    int[] arr = new int[26];

    StringBuilder res = new StringBuilder();
    for (int i = 0; i < str.length(); i++) {
        int idx = str.charAt(i) - 'a';
        if (arr[idx] == 0) 
            res.append(str.charAt(i));
        arr[idx] += 1;
    }
    return res.toString();
}

编辑于 2019-05-16 20:00:07 回复(0)

HashSet牛逼!

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        String str=in.next();
        Set<String> set=new LinkedHashSet<>();
        for(int i=0;i<str.length();i++)
            set.add(str.substring(i,i+1));
        Iterator<String> iterator=set.iterator();
        while(iterator.hasNext())
            System.out.print(iterator.next());
    }
}
发表于 2019-03-10 23:06:51 回复(0)
import java.util.Scanner;
import java.util.Set;
import java.util.LinkedHashSet;
public class Main{
    public static void main(String[] args){
        try(Scanner in = new Scanner(System.in)){
            System.out.println(helper(in.nextLine()));
        }
    }
    public static String helper(String s){
        Set<Character> set = new LinkedHashSet<>();
        char[] cs = s.toCharArray();
        for(char c:cs){
            set.add(c);
        }
        StringBuffer sb = new StringBuffer();
        for(char c:set){
            sb.append(c);
        }
        return sb.toString();
    }
}


发表于 2019-01-15 21:40:30 回复(1)
import java.util.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String n=sc.nextLine();
char[] arr=n.toCharArray();
Set h=new HashSet();
StringBuffer res=new StringBuffer();
for(inti=0;i<arr.length;i++){
char tmp=arr[i];
if(h.add(tmp)){
res.append(tmp);}
}
//String s=h.toString();
System.out.println(res);
}
}
编辑于 2018-07-11 12:35:04 回复(0)