首页 > 试题广场 >

去除重复字符

[编程题]去除重复字符
  • 热度指数:274 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
去除字符串中的重复字符,对于出现超过2次(包含2次)的字符,只保留第一个。
例:输入abcbdde,输出abcde。
示例1

输入

"abcbdde"

输出

"abcde"

备注:
不使用集合类、字符串contains等功能。
import java.util.*;


public class Solution {
    /**
     * 
     * @param str string字符串 
     * @return string字符串
     */
    public String removeDuplicatedChars (String str) {
        // write code here
        boolean[] isExistChar = new boolean[26];
        boolean[] isExistNum = new boolean[10];
        char[] chars = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (char c : chars) {
            //是字母
            if(c >= 'a' && c <= 'z'){
                if(!isExistChar[c - 'a']){
                    sb.append(c);
                    isExistChar[c - 'a'] = true;
                }    
            }
            //是数字
            if(c >= '0' && c <= '9'){
                if(!isExistNum[c - '0']){
                    sb.append(c);
                    isExistNum[c - '0'] = true;
                }
            }
        }
        return sb.toString();
    }
}

发表于 2021-02-24 09:40:28 回复(0)
import java.util.*;


public class Solution {
  /**
   * 
   * @param str string字符串 
   * @return string字符串
   */
  public String removeDuplicatedChars (String str) {
    StringBuilder ansBuilder = new StringBuilder();
    boolean[] flags = new boolean[128];
    for (int i = 0, n = str.length(); i < n; i++) {
      char c = str.charAt(i);
      if (!flags[c]) {
        ansBuilder.append(c);
        flags[c] = true;
      }
    }
    return ansBuilder.toString();
  }
}
发表于 2022-03-30 16:41:00 回复(0)
    public String removeDuplicatedChars(String str) {
        StringBuilder sb = new StringBuilder();
        int[] map = new int[128];
        for (char c: str.toCharArray()) {
            if (map[c] > 0) {
                continue;
            } else {
                map[c]++;
                sb.append(c);
            }
        }
        return sb.toString();
    }

发表于 2022-03-09 15:08:39 回复(0)
不使用集合类、字符串contains等功能,那我用replace总可以吧?用一个新串保存。
import java.util.*;


public class Solution {
    /**
     * 
     * @param str string字符串 
     * @return string字符串
     */
    public String removeDuplicatedChars (String str) {
        // write code here
        String newStr = "";
        while (str.length() > 0) {
            newStr += String.valueOf(str.charAt(0));
            str = str.replace(String.valueOf(str.charAt(0)), "");
        }
        return newStr;
    }
}


发表于 2021-09-26 16:39:26 回复(3)
    public static String duplicateRemoval(String str) {
        StringBuffer result = new StringBuffer();
        char[] chars = str.toCharArray();
        Set<Character> charSet = new HashSet<>();
        for (char c : chars) {
            if (!charSet.contains(c)) {
                result.append(c);
            }
            charSet.add(c);
        }
        return result.toString();
    }

有盆友说不能用集合类,加个不用集合类的方法

    public static String duplicateRemovalV2(String str) {
        if (StringUtils.isNotBlank(str)) {
            StringBuffer s = new StringBuffer(str);
            s = s.reverse();
            str = s.toString();

            str = str.replaceAll("(?s)(.)(?=.*\\1)", "");

            s = new StringBuffer(str);
            return s.reverse().toString();
        }
        return null;
    }


编辑于 2021-02-25 17:18:21 回复(4)