Java机试题:删除字符串中出现次数最少的字符(使用正则处理)
描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
注意每个输入文件有多组输入,即多个字符串用回车隔开
数据范围:输入的字符串长度满足
,保证输入的字符串中仅出现小写字母
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() + "]","")); } } }
题目来源:牛客网
浙公网安备 33010602011771号