题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str=in.next(); int leng=str.length(); char[] chars=str.toCharArray(); int[] count=new int[leng]; for(int i=0;i<leng;i++){ count[i]=0; } for(int i=0;i<leng;i++){ int a=0; for(int j=0;j<=i-1;j++){ if(chars[i]==chars[j]){a++;count[j]++;break;} } if(a==0)count[i]++; } int min=leng; for(int i=0;i<leng;i++){ if(min>count[i]&&count[i]!=0) min=count[i]; } for(int i=0;i<leng;i++){ if(min==count[i]){ str=str.replace(Character.toString(chars[i]),""); } } System.out.print(str); } }
先定义一个string接收输入,然后定义一个字符数组chars,将str的字符依次放到数组中
tring str=in.next();
int leng=str.length();
char[] chars=str.toCharArray();
之后定义一个int数组num,初始化为0,作为字符数量
nt[] count=new int[leng];
for(int i=0;i<leng;i++){
count[i]=0;
}
用一个for从chars[0]开始检测字符数组,为i,再用一个for从0开始比较,为j,如果i之前没有一样的字符,这个字符就是第一个,
这样num[i]++;变成1,如果他之前有一样的字符,前面一样的字符的位置num[j]++
for(int i=0;i<leng;i++){
int a=0;
for(int j=0;j<=i-1;j++){
if(chars[i]==chars[j]){a++;count[j]++;break;}
}
if(a==0)count[i]++;
}
比较完之后,检测num中除了0之外的最小值min
int min=leng;
for(int i=0;i<leng;i++){
if(min>count[i]&&count[i]!=0) min=count[i];
}
然后删除掉字符串中,数量最少的字符,用replace将字符转化为”“空即可
for(int i=0;i<leng;i++){
if(min==count[i]){
str=str.replace(Character.toString(chars[i]),"");
}
}
最后输出字符串
System.out.print(str);
#华为od题库#随便发发而已