欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法 - 小试1 - 去除字符串重复字符

程序员文章站 2022-05-12 20:21:03
...

目录

需求描述1 - 去除字符串中相邻重复的字符。

需求描述2 - 去除字符串中所有重复的字符(只保留第一个重复的字符)

需求描述3 - 删除字符串中所有相邻的重复串


需求描述1 - 去除字符串中相邻重复的字符。

代码:

public void initJava(){

    String str="aabbbccccdddddeeeeeeeeefff234tttdddfffbbbggg";

    String result=removeRepeatChar(str);

    Log.d("TAG","去重前----:"+str);

    Log.d("TAG","去重后----:"+result);

}


public String removeRepeatChar(String s) {

    if (s == null) {

        return "";

    }

    StringBuffer sb = new StringBuffer();

    int i = 0;

    int len = s.length();

    while (i < len) {

        char c = s.charAt(i);

        sb.append(c);

        i++;

        while (i < len && s.charAt(i) == c) {//这个是如果这两个值相等,就让i+1取下一个元素

          i++;

        }

    }

    return sb.toString();
    
}

结果:

  1. 去重前----:aabbbccccdddddeeeeeeeeefff234tttdddfffbbbggg

  2. 去重后----:abcdef234tdfbg

需求描述2 - 去除字符串中所有重复的字符(只保留第一个重复的字符)

代码:

public void initJava(){

    String str="aabbbccccdddddeeeeeeeeefff234tttdddfffbbbggg";

    removeMethod(str);

}


public void removeMethod(String s) {

    Log.d("TAG", "去重前----:" + s);

    StringBuffer sb = new StringBuffer();

    int len = s.length();

    for (int i = 0; i < len; i++) {

        char c = s.charAt(i);

        if (s.indexOf(c) ==s.lastIndexOf(c)) {
            //此字符第一次位置和最后位置一致 即肯定没有重复的直接添加

            sb.append(c);

        } else {//同理 次字符出现过多次

            int fristposition=s.indexOf(c);//次字符第一次出现的位置

            if(fristposition==i){
            //第一次出现的位置和当前位置一致 即第一次出现添加

            sb.append(c);

            }

       }

   }

   Log.d("TAG", "去重后----:" + sb.toString());

}

结果:

  1. 去重前----:aabbbccccdddddeeeeeeeeefff234tttdddfffbbbggg

  2. 去重后----:abcdef234tg

需求描述3 - 删除字符串中所有相邻的重复串

描述:

算法 - 小试1 - 去除字符串重复字符

解题思路:

  1. 遍历字符串 S,对于每次遍历的字符都判断是否与字符串中索引前一位元素是否相同

  2. 相同时,通过 StringBuilder 的 delete() 方法,来删除当前字符与前一位相同的字符

  3. 注意:索引也需要减 2,否则可能出现索引越界错误

代码:

public static String removeDuplicates(String S) {
    StringBuilder sb = new StringBuilder(S);
    for (int i = 1; i < sb.length(); i++) {
        // 当前遍历字符与前一字符相同时,说明重复
        if (i > 0 && sb.charAt(i) == sb.charAt(i - 1)) {
            // 删除两个字符,索引分别为:i+1,i
            sb.delete(i - 1, i + 1);
            // 防止索引越界,遍历索引 i 也相应减 2(因删除了两个字符)
            i -= 2;
        }
    }
    return sb.toString();
}

 

相关标签: java面试 算法