删除一个字符串里出现次数最多的子字符串

题目: 删除一个字符串里出现次数最多的子字符串

如果有多个出现次数相同的并且出现次数最多则将多个全部删除比如abbccd得到结果 ad

分析:
第一步,首先将该字符串的所有子字符串都列出来,并且统计出每个子字符串出现的次数(这需要使用HashMap来解决);

第二步,找出子字符串中出现次数最多的子字符串,并将其保存下来(需要使用List集合来解决问题);

第三步,将原始字符串中的子字符串全部使用“”替换掉,最后得到题目结果(使用String的replaceAll()f方法替换字符串)。

代码:

package 华为机试题;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;

/**
 * @author Hutongling
 *
 * @time:2017年4月9日 上午11:07:21
 */
public class 删除一个字符串里出现次数最多的子字符串 {

    //子字符串集合
    static Map<String,Integer> subStringSubset(String string){
        if(string==null || string.length()==0)
            return null;
        Map<String,Integer> map=new LinkedHashMap<>(); //定义一个set集合存储结果

        map.put(string.substring(0, 1), 0);;
        for(int i=1;i<string.length();i++){ //此处的i为定义子字符串的长度,子字符串的长度从1到n-1
            for(int j=0;j<=string.length()-i;j++){
                if(map.containsKey(string.substring(j, j+i)))
                    map.put(string.substring(j, j+i),map.get(string.substring(j, j+i))+1);//从原始字符串中将一定长度的子字符串取出来放进map集合中,并统计每种字符出现的次数
                else 
                    map.put(string.substring(j, j+i), 1);
            }
        }
        System.out.println("子字符串集合及每种子字符串出现的次数: "+map);
        return map;
    }

    static void deleteMaxSubString(String string){
        Map<String,Integer> map=subStringSubset(string);
        Set<String> keySet=map.keySet();
        int times=Integer.MIN_VALUE;
        LinkedList<String> list=new LinkedList<>();
        for(String s:keySet)
            if(map.get(s)>times)
                times=map.get(s);
        for(String s:keySet)
            if(map.get(s)==times)
                list.add(s);
        System.out.println("需要删除的子字符串: "+list);
        for(int i=0;i<list.size();i++)
            string=string.replaceAll(list.get(i),"");

        System.out.println("删除子字符串之后的结果:"+ string);
    }
    public static void main(String[] args) {
        String  string="abbccd";
        deleteMaxSubString(string);
    }

}

代码结果:
子字符串集合及每种子字符串出现的次数: {a=1, b=2, c=2, d=1, ab=1, bb=1, bc=1, cc=1, cd=1, abb=1, bbc=1, bcc=1, ccd=1, abbc=1, bbcc=1, bccd=1, abbcc=1, bbccd=1}
需要删除的子字符串: [b, c]
删除子字符串之后的结果:ad

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值