常用字符串算法

一、判断两个字符串是否包含相同的内容

1.巧用数组下标实现,把用字符的ASCII码值当作下标,记录出现的字符,然后对两字符串进行遍历

    /**
     * 判断s于s2是否相同
     * @param s
     * @param s2
     * @return boolean
     */
    static boolean equals(String s,String s2) {
        if(s.length() != s2.length())return  false;
        int[] arr = new int[128];
        for(int i=0;i

2.使用键值对TreeMap、HashMap或HashTable进行登记式记录,这个适用于文字等复杂的字符串

    /**
     * TreeMap实现比较两个字符串包含的内容是否相同
     * @param s1
     * @param s2
     * @return
     */
    static boolean TreeMapEquals(String  s1,String s2) {
        if(s1.length()!= s2.length())return  false;
        TreeMap map = new  TreeMap<>();
        for(int i=0;i

二、判断一个字符串是否为另个一字符串的子集

1.数组下标记录实现

    /**
     * 检查两个字符串的子集是否具有相同的子集
     * @param sub 子集串
     * @param sup 匹配串
     * @return boolean
     */
    static boolean check(String sub,String sup)  {
        int[] asc = new int[128];
        for(int i=0;i

2.键值对记录实现

    /**
     * 使用HashMap实现
     * @param sub 子集串
     * @param sup 匹配串
     * @return
     */
    static boolean check_hash(String sub,String  sup) {
        Map map = new  HashMap();
        
        for(int i=0;i

三、去除字符串种出现k次的字符

1.普通实现

    /**
     * 在原串种删去指定个字符
     * @param s 原串
     * @param tar 目标字符
     * @param k 删除数量
     * @return
     */
    static String remove(String s,char tar,int  k) {
        char[] chars = s.toCharArray();
        int count = 0;
        StringBuilder sb = new  StringBuilder(chars.length);
        for(int i=0;i

2.正则表达式替换实现

    /**
     * 在原串种删去指定个字符
     * @param s 原串
     * @param tar 目标字符
     * @param k 删除数量
     * @return
     */
    static String remove2(String s,char tar,int  k) {
        return s.replaceAll(tar+"{"+k+"}", "");
    }

四、字符串压缩统计

形如aaaabbbbbccccc的可以写出a4b5c5,这就实现了对字符串的简单压缩,而有一些abc,写出a1b1c1明显比原串长因此不适用于这种算法,所以原串输出最合适。下面是这个算法的实现。

    static String yasuo(String s) {
        char[] arr = s.toCharArray();
        int count = 0;
        int last = 0;
        StringBuilder sb = new  StringBuilder(arr.length);
        for(int i=0;i1) {
            sb.append(count);
        }
        //StringBuilder的长度大于arr的长度时,返回短的原字符串s
        if(sb.length()>=arr.length) {
            return s;
        }
        return sb.toString();
    }

 

你可能感兴趣的:(算法)