第二题:去除重复字符并排序
运行时间限制:无限制
内容限制: 无限制
输入: 字符串
输出: 去除重复字符并排序的字符串
样例输入: aabcdefff
样例输出: abcdef
<span style="font-size:14px;">import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class RemoveDuplicate {
public static void main(String[] args) throws Exception {
//利用map中键值对唯一,并且key不能重复
/*String str = "aabcdefff1233";
Map<String,Object> map = new HashMap<String,Object>();
for(int i = 0; i<str.length();i++){
Character ch = str.charAt(i);
String s = ch.toString();
map.put(s, ch);
}
StringBuffer buff = new StringBuffer();
StringBuffer buff1 = new StringBuffer();
for(Entry<String, Object> entry:map.entrySet()){
String key = entry.getKey();
System.out.print(entry.getValue());
Object obj = entry.getValue();
buff.append(obj);
}
System.out.println("输出去除重复后:" + buff.toString());
String charString = buff.toString();
char[] ch = charString.toCharArray();
Arrays.sort(ch);
for(char c:ch){
System.out.println("排序后字符:" + c);
buff1.append(c);
}
System.out.println("排序后字符串为:" + buff1.toString());
*/
BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入字符串:");
String str = in.readLine();
/**
* 1、去除重复,利用map中的键值对唯一和key值不能重复特性
* 2、排序,利用Arrays中的sort方法进行排序
*/
Map<String,Character> map = new HashMap<String,Character>();
//将字符串循环,将每一个值放入map中
for(int i = 0; i<str.length();i++){
Character character = str.charAt(i);
String st = character.toString();
map.put(st, character);
}
//将map中的值取出来并恢复为字符串
StringBuffer buff = new StringBuffer();
for(Entry<String,Character> entry:map.entrySet()){
buff.append(entry.getValue());
}
System.out.println("去除重复后字符串:" + buff.toString());
String charString = buff.toString();
char[] ch = charString.toCharArray();
//利用Arrays特性
Arrays.sort(ch);
StringBuffer strBuff = new StringBuffer();
for(char c:ch){
System.out.println("排序后字符:" + c);
strBuff.append(c);
}
System.out.println("排序后字符串为:" + strBuff.toString());
}
}</span>
//利用set集合的不重复性质
String str = "aabcdefff1233";
Set<Object> set = new HashSet<Object>();
for(int i = 0;i<str.length();i++){
Character c = str.charAt(i);
set.add(c);
}
Object[] obj = set.toArray();
Arrays.sort(obj);
StringBuffer strBuff = new StringBuffer();
for(Object o :obj){
strBuff.append(o);
}
System.out.println("排序后:"+strBuff.toString());
第一题:拼音转数字
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class PinYin {
public static void main(String[] args) throws Exception {
BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入:");
String str = in.readLine();
/**
* 1、判断是否是英文字母
* 2、判断组合在一起是否是阿拉伯数字的拼音
*/
//String[] number = {"yi","er","san","si","wu","liu","qi","ba","jiu"};
StringBuffer buff = new StringBuffer();
StringBuffer strBuff = new StringBuffer();
int num = 0;
for(int i = 0;i<str.length();i++){
if(strBuff == null){
strBuff = new StringBuffer();
}
char c = str.charAt(i);
strBuff.append(c);
switch(strBuff.toString()){
case "yi":
num = 1;
strBuff = null;
buff.append(num);
break;
case "er":
num = 2;
strBuff = null;
buff.append(num);
break;
case "san":
num = 3;
strBuff = null;
buff.append(num);
break;
case "si":
num = 4;
strBuff = null;
buff.append(num);
break;
case "wu":
num = 5;
strBuff = null;
buff.append(num);
break;
case "liu":
num = 6;
strBuff = null;
buff.append(num);
break;
case "qi":
num = 7;
strBuff = null;
buff.append(num);
break;
case "ba":
num = 8;
strBuff = null;
buff.append(num);
break;
case "jiu":
num = 9;
strBuff = null;
buff.append(num);
break;
}
/*if(num != null){
buff.append(num);
num = null;
}*/
}
System.out.println("转化的数字为:" + buff.toString());
}
}
这一题的解法有点不灵活,效率不高,目前只想到了这种解法,如果还想到了在修改。
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串, N代表输出的每串字符串的位数,不够补0。
例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws Exception {
/*键盘录入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入字符串的个数:" );
String number = br.readLine();
System.out.println("请输入字符串的:" );
String str = br.readLine();*/
String str = "12345678123456";
/**
* 1、判断字符串的长度是否大于N
* 2、分为3中情况:小于,等于,大于
* 3、判断大于的情况:分为两种情况,刚好余数为0,余数不为0
*/
int len = str.length();
if(len == 8){
System.out.println(str);
}else if(len < 8 && len > 0){
int num = 8 - len;
for(int i = 0;i<num;i++){
str = str + "0";
}
System.out.println(str);
}else{
int num = len / 8; //商
int num1 = len % 8; //余数
String str1 = null;
String str2 = null;
if(num1 == 0){
str1 = str.substring(0, 8);
System.out.println("截取后:" + str1);
str2 = str.substring(8, 16);
System.out.println("截取后:" + str2);
}else{
str1 = str.substring(0, 8);
str2 = str.substring(8, len);
for(int i = 0;i<8 - num1;i++){
str2 = str2 + "0";
}
System.out.println(str1 + "_"+str2);
}
System.out.println(num +"_" + num1);
}
}
}
这一题写的比较简单,只是大概的实现了功能,没有做修改。