import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 功能描述:删除字符串中字符个数最少的字符,最少字符串有多个,最少的要全部删除,然后返回该子字符串。
* @author 汤小萌
*
*/
public class DeleteMinChar {
/**
*
* @param data 传进来的字符串
* @return
*/
public static String deleteMinChar(String data) {
// 将字符串转为数组
char[] ch = data.toCharArray();
// 创建Map集合,key : 字符 -- value : 字符的个数
Map<Character, Integer> map = new HashMap<Character, Integer>();
// 先将ch里面的元素的键填充进去,所有的value都是0 (利用了Map集合的键必须唯一特性)
for(int i = 0; i < ch.length; i++) {
map.put(ch[i], 0);
}
// 每一次遍历都是往直前在Map中占位的元素重新改变value的值
for(int i = 0; i < ch.length; i++) {
map.put(ch[i], map.get(ch[i]) + 1);
}
System.out.println(map);
// 这是一个比较大的数
int num = Integer.MAX_VALUE;
// 使用List集合存放最少的字符
List<Character> list = new ArrayList<>();
for(int i = 0; i < ch.length; i++) {
if(map.get(ch[i]) < num) {
// 如果当前遍历到的元素的个数小于上一个的元素的个数,那么就需要将比较的元素num换成当前这个元素的个数
num = map.get(ch[i]);
// 需要将list里面的元素都删除(因为发现还有更少的元素)
list.clear();
list.add(ch[i]);
} else if(map.get(ch[i]) == num ) {
// 如果发现有相同少的个数的元素(那么这个元素也需要被添加到集合中,被删除)
list.add(ch[i]);
}
}
// 将list中的元素删除
for(char c : list) {
data = data.replace(String.valueOf(c), "");
}
return data;
}
public static void main(String[] args) {
String str = "asdasdasee";
System.out.println(deleteMinChar(str));
}
}
功能描述:删除字符串中字符个数最少的字符,最少字符串有多个,最少的要全部删除,然后返回该子字符串。
猜你喜欢
转载自blog.csdn.net/qq_38200548/article/details/80610527
今日推荐
周排行