描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
注意每个输入文件有多组输入,即多个字符串用回车隔开
数据范围:输入的字符串长度满足

,保证输入的字符串中仅出现小写字母
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String str = sc.nextLine();
int minLen = -1;
int tempLen = 0;
// 找出最小次数
for (int i = 0; i < str.length(); i++) {
// 用正则匹配替换掉不是该字符的其他内容,则剩下的就是该字符,既可以获取该字符的长度
tempLen = str.replaceAll("[^"+str.charAt(i) +"]","").length();
if(minLen == -1 || minLen > tempLen){
minLen = tempLen;
}
}
// 获取长度是最小长度,既需要删除的字符.注意这里不能在循环中直接改变str,因为会导致str长度变化,则匹配结果就是错的。
StringBuffer needDelChar = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
tempLen = str.replaceAll("[^"+str.charAt(i) +"]","").length();
if(tempLen == minLen){
needDelChar.append(str.charAt(i));
}
}
// 删除掉次数最小的字符,[]不能删除,正则中[].表示一个字符内容。去掉则有几个就需要匹配到几个字符。
// eg:[abc] 表示匹配a或b或c,abc表示匹配abc
System.out.println(str.replaceAll("["+needDelChar.toString() + "]",""));
}
}
}