删除字符串中出现次数最少的字符,汽水瓶,简单密码

来源:互联网 发布:重庆mac专柜 编辑:程序博客网 时间:2024/05/16 01:58

删除字符串中出现次数最少的字符
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

输入描述:字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:删除字符串中出现次数最少的字符后的字符串。
输入例子:
abcdd
输出例子:
dd

  1. 思路

1.统计每个字符出现的次数,这个很简单,用HashMap就行
2.找出出现次数的最小值(因为输入的字符串最多含有20个字符,所以假设字符出现的最小值为min=20,遍历keySet,发现value值小于min,就替换)
3.从字符串中删除出现次数最少的字符c(c为变量)(str.replace(String.valueof(c),”“))

  1. 源代码

:`import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

//删除字符串中出现次数最少的字符
public class RemoveMinOften {

public static void main(String[] args) {    // TODO Auto-generated method stub    Scanner sc = new Scanner(System.in);    while(sc.hasNext()){        String input = sc.next();        System.out.println(process(input));    }}private static String process(String str) {    // TODO Auto-generated method stub    char[] ch = str.toCharArray();    HashMap<Character,Integer> map = new HashMap();    for(int i=0;i<ch.length;i++){        if(map.containsKey(ch[i])){            map.put(ch[i], map.get(ch[i])+1);        }else{            map.put(ch[i], 1);        }    }    int min = 20;//最小次数    Set<Character> set = map.keySet();    for(char c:set){        if(map.get(c)<min)            min = map.get(c);    }    for(char c:set){        if(map.get(c)==min)            str = str.replace(String.valueOf(c), "");    }    return str;}

}
`
汽水瓶
题目描述

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

输入例子:
3
10
81
0

  1. 思路:用递归的思路,n个汽水瓶可换的瓶子为n/3+(n/3+n%3)可换的瓶子

  2. 源代码

`import java.util.Scanner;

public class DrinkBottle {

public static void main(String[] args) {    // TODO Auto-generated method stub    Scanner sc = new Scanner(System.in);    while(sc.hasNext()){        int n = sc.nextInt();        System.out.println(change(n));    }}private static int change(int n) {    // TODO Auto-generated method stub    if(n==1||n==0)        return 0;    if(n==3||n==2)        return 1;    int shang = n/3;    int yushu = n%3;    return (shang+change(shang+yushu));}

}
`
简单密码
题目描述

密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。

假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。

他是这么变换的,大家都知道手机上的字母: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,

声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。

输入描述:
输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾

输出描述:
输出渊子真正的密文

输入例子:
YUANzhi1987

输出例子:
zvbo9441987

源代码:`import java.util.Scanner;
//把字符串中的大写字母换成小写字母的后一位,小写字母换成键盘数字
public class EasyPWD {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String oldPWD = sc.next();
System.out.println(password(oldPWD));
}
}

private static char[] password(String str) {    char[] ch = str.toCharArray();    for(int i=0;i<ch.length;i++){        //大写字母        if(ch[i]>=48&&ch[i]<=57)            continue;        else if(ch[i]>='A'&&ch[i]<='Y'){            ch[i] = (char) (ch[i]+33);//向后移1位并转换为小写        }        else if(ch[i]=='Z'){            ch[i] = 'a';        }        else if(ch[i]>='a'&&ch[i]<='c'){            ch[i] = '2';        }        else if(ch[i]>='d'&&ch[i]<='f'){            ch[i] = '3';        }else if(ch[i]>='g'&&ch[i]<='i'){            ch[i] = '4';        }else if(ch[i]>='j'&&ch[i]<='l'){            ch[i] = '5';        }else if(ch[i]>='m'&&ch[i]<='o'){            ch[i] = '6';        }else if(ch[i]>='p'&&ch[i]<='s'){            ch[i] = '7';        }else if(ch[i]>='t'&&ch[i]<='v'){            ch[i] = '8';        }else if(ch[i]>='w'&&ch[i]<='z'){            ch[i] = '9';        }    }    return ch;}

}
`

0 0
原创粉丝点击