首页 > 试题广场 >

删除字符串中出现次数最少的字符

[编程题]删除字符串中出现次数最少的字符
  • 热度指数:369029 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

数据范围:输入的字符串长度满足 ,保证输入的字符串中仅出现小写字母

输入描述:

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。



输出描述:

删除字符串中出现次数最少的字符后的字符串。

示例1

输入

aabcddd

输出

aaddd
// 去除字符串中出现次数最少的字符,不改变原字符串的顺序。
// “ababac” —— “ababa”; “aaabbbcceeff” —— “aaabbb”

function charcount(str: string) {
    const strCount: any = {}
    const strArr = str.split("")
    strArr.forEach(i => {
        strCount[i] ? (strCount[i] = strCount[i] + 1) : (strCount[i] = 1)
    })
    let minKey = ''
    let minValue = 0

    for (const i in strCount) {
        if (!minKey) {
            minKey = i
            minValue = strCount[i]
        }
        if (minValue > strCount[i]) {
            minValue = strCount[i]
            minKey = i
        }

    }
    let minKeys = []
    for (const i in strCount) {
        if (strCount[i] === minValue) {
            minKeys.push(i)
        }
    }
    let newStr = str
    for (const i of minKeys) {
        newStr = newStr.replaceAll(i, "")
    }
    console.log(newStr);
    return newStr
}

charcount('ababac')
charcount('abbbcceeffgg')
charcount('aabcddd')
发表于 2023-06-20 17:41:21 回复(0)
function deleteStr(line){
  let hash = {}
  for(let i = 0; i<line.length; i++){
    if(!hash[line[i]]){
      hash[line[i]] = 1
    }else{
      hash[line[i]]++
    }
  }
  // 求出hash中元素最少的个数?
  let min = hash[line[0]]
  for(let key in hash){
    if(hash[key] < min){
      min = hash[key]
    }
  }
  // 将个数等于min的字符全部删除
  for(let key in hash){
    if(hash[key] == min) {
      let reg = new RegExp(key,"g")
      line = line.replace(reg,"")
    }
  }
  console.log(line)
}

发表于 2022-06-20 22:24:26 回复(0)
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
const lines = [];
rl.on("line", function (line) {
    const lines = [...line]
    const obj={}
    lines.forEach((char) => {
        obj[char] = (obj[char]||0) + 1
    })
    let values = Object.values(obj), min = values[0]
    values.forEach((item)=> {
        min = Math.min(item, min)
    })
    Object.keys(obj).forEach((key)=> {
        if (obj[key] ===min) {
            line = line.replace(new RegExp(key,'g'), '')
        }
    })
    console.log(line)
});

先分解数组
在用对象key value值 计算每个字符次数 key为字符,value为次数
拿出最小次数
然后通过replace替换最小次数字符

发表于 2022-06-02 23:28:01 回复(0)
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const arr = [];
rl.on('line', function (line) {
    if (line === "") {
        rl.close();
    } else {
        arr.push(line);
    }
});

rl.on("close", function() {
    arr.forEach(string => {
        
        // 记录字符和字符出现的次数
        const charArr = [];
        const countArr = [];
        for(char of string) {
            const index = charArr.indexOf(char);
            if (index === -1) {
                charArr.push(char);
                countArr.push(1);
            } else {
                countArr[index]++;
            }
        }
        
        // 计算出现次数最少的字符
        const min = Math.min(...countArr);
        let minChars = "";
        countArr.forEach((count, i) => {
            if (count === min) {
                minChars = minChars + charArr[i];
            }
        });
        
        // 将出现次数最少的字符删除
        const pattern = "[" + minChars + "]";
        const resultStr = string.replace(new RegExp(pattern, "g"), "");
        console.log(resultStr);
    });
});

发表于 2022-01-22 18:26:33 回复(0)
const readline = require("readline");
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
});

rl.on("line",function(line){
    var list = line.split('');
    //按字典序排序
    list.sort();
    //console.log(list);
    //计算次数
    let obj = {};
    for(let i=0;i<list.length;i++){
        if (obj[list[i]]){
            obj[list[i]]++;
        } else {
            obj[list[i]] = 1;
        }
    }
    //console.log(obj);
    //obj对象转成数组
     var arr=[];
    for(let key in obj){
        arr.push({"key":key,"value":obj[key]});
    }
    //console.log(arr);
    //按次数排序,降序
    arr.sort((a,b)=>{
        return b.value-a.value;
    })
    //console.log(arr);
    //找出所有大于最后一个字符次数的结果集
    var result=[];
    arr.forEach(item=>{
        if(item.value>arr[arr.length-1].value){
            result.push(item);
        }
    });
    //console.log(result);
    //比较输出
    var str="";
    line.split('').forEach(li=>{
        result.forEach(item=>{
        if(li==item.key){
            str+=item.key;
        }
     })
    })
     console.log(str);
   
});

编辑于 2021-11-16 20:01:23 回复(0)
let line
while(line = readline()) {
  let arr = [...new Set(line.split(''))]
  let letter = []
  for(let item of arr) {
    let index = line.split('').filter(e => e === item).length
    letter[index] ? letter[index].push(item) : letter[index] = [item]
  }
  letter = letter.filter(() => true)
  let reg = new RegExp(`[${letter[0].join('')}]`, 'g')
  console.log(line.replace(reg, ''))
}

编辑于 2021-07-08 11:52:38 回复(1)
var line
while(line=readline()){
    var obj={}
    for(var i=0;i<line.length;i++){
        var key=line[i]
        if(!obj[key]){
            obj[key]=1
        }else{
            obj[key]++
        }
    }
    var valueList=[]
    for(key in obj){
        valueList.push(obj[key]);
    }
    valueList.sort(function(a,b){
        return a-b
    })
    var min=valueList[0]
    var result
    var arr=line.split("")
    for(var i=0;i<line.length;i++){
        var key=line[i]
        if(obj[key]==min){
            delete arr[i]
        }
    }
    console.log(arr.join(""))
}
发表于 2021-06-22 16:31:05 回复(0)
function filterLine(str) {
  let obj = {}
  for (let i = 0; i < str.length; i++) {
    if (!obj[str[i]]) {
      obj[str[i]] = 1
    } else {
      obj[str[i]]++
    }
  }
  let smallest = Object.keys(obj).reduce((total, currentValue) => {
    return Math.min(total, obj[currentValue])
  }, Infinity)
  let endArr = Object.keys(obj).filter(key => {
    return obj[key] === smallest
  })
  for (let i = 0; i < endArr.length; i++) {
    str = str.split(endArr[i]).join('')
  }
  console.log(str)
}
while(line = readline()){
    filterLine(line)
}

发表于 2021-04-15 15:59:24 回复(0)
let arr=str.split('')
let s=arr.join("")
let s2=s.split('').sort().join("")
let s1=s2.match(/(\w)\1*/g).sort((a,b)=>a.length-b.length)
let min=s1[0].length
let result=[]
for(let i=0;i<s1.length;i++){
    if(s1[i].length==s1[0].length){
       result.push(s1[i]) 
    }
}
var res=""
for(let i=0;i<s.length;i++){
    if(!result.includes(s[i])){
        res=res+s[i]
        
}
}
console.log(res)
}
发表于 2020-07-01 17:46:14 回复(0)
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});

function delMin(str) {
  const countObj = {}
  const strArr = Array.from(str)
  strArr.forEach(item => {
    if (countObj[item]) {
      countObj[item] += 1
    } else {
      countObj[item] = 1
    }
  })

  const minTime = Math.min(...(Object.keys(countObj)).map(item => {
    return countObj[item]
  }))

  const delFLag = Object.keys(countObj).filter(item => countObj[item] === minTime)

  for (let i = 0; i<strArr.length; i++) {
    if (delFLag.indexOf(strArr[i]) > -1) {
      strArr[i] = ''
    }
  }

  console.log(strArr.join(''))
}

rl.on('line', function(line){
   delMin(line)
});

发表于 2020-02-29 10:51:39 回复(0)
发表于 2018-12-03 22:17:35 回复(0)
function deletString(str2){
    arr2=str2.split('');
//reduce求出每个字符对应的个数
var result=arr2.reduce(function(allString,name){     if(name in allString){         allString[name]++;     }     else{         allString[name]=1;     }     return allString;
},{});
//排序取最小值
var arr=Object.keys(result).sort(function(v1,v2){     return result[v1]-result[v2]
})
//将满足条件的最小字符放入一个数组
var arr3=[]
var min=result[arr[0]]
for(var i=0;i<arr.length;i++){     if(result[arr[i]]===min){              arr3.push(arr[i])     }
}

//正则表达式删除最小的元素
for(var i=0;i<arr3.length;i++){     var reg = new RegExp(arr3[i],"g");
    var a=str2.replace(reg,"");     str2=a;
}
return str2;
}
while(line = readline()){
    console.log(deletString(line));
}


编辑于 2018-06-06 21:57:40 回复(0)
function def_str(par){     var arr=par.split("");     var obj={};     var min=99999;     void function(){         for(var i=0, len=arr.length; i<len; i++){         if(obj.hasOwnProperty(arr[i])){             obj[arr[i]]++;         }else{             obj[arr[i]]=1;         }     }     }();     void function(){         for(var key in obj){             if(obj[key]<min){                 min=obj[key];             }         }     }();     void function(){         for(var key in obj){             if(obj[key]===min){                 arr.splice(arr.indexOf(key),1);             }         }     }();     return arr.join("");
}
var line;
while(line=readline()){
    var str=line;
    var res=def_str(str);
    console.log(res);
}

发表于 2018-02-24 08:22:36 回复(0)
while(line = readline()){
    console.log(deleChar(line));
}

function deleChar(str){
    //hashmap字符对应字符个数
    var obj = {};
    for(var i=0; i<str.length; i++){
        if(str[i] in obj){
            obj[str[i]]++;
        }else{
            obj[str[i]]=1;
        }
    }
    //排序取最小值
    var arr = Object.keys(obj).sort(function(v1,v2){
        return obj[v1]-obj[v2];
    });
    var arr2 = [];
    var cnt = obj[arr[0]];
    //求出满足最小值得字符
    for(var i=0; i<arr.length; i++){
        if(obj[arr[i]] == cnt){
            arr2.push(arr[i]);
        }
    }
    //通过正则表达式删除
    var result = '';
    for(var i=0; i<arr2.length; i++){
        var regx = new RegExp(arr[i], 'g'); 
        result = str.replace(regx, '');
        str = result;
    }
    return str;
}

发表于 2017-09-21 14:38:19 回复(0)

问题信息

难度:
17条回答 85197浏览

热门推荐

通过挑战的用户

查看代码