最近是校招的高峰期,我呢也参加了很多宣讲会。当然计算机系技术类的应届生,宣讲后做笔试理所当然。现在将遇到过的编程题都记录下来,题目如下:
两个字符串如果其中一个交换任意次数,能成为相同的字符串,则将其归为同一类型,现将N个字符串分类(编程实现)。
解:
分析:题目意思是两个字符串每个字母出现的次数相同则为一类,那我按正常思路来写就是将每个字符串中每个字母出现次数记录下来,然后做比较。那么用什么存好呢?当然是map嘛,k-v(字母-次数)无重复。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
class Base_003 {
private static int num ;
private static List<Map<Character, Integer>> list;
public static void main(String[] args){
input();
Classification();
}
public static void input(){
list = new ArrayList<Map<Character,Integer>>();
Scanner in = new Scanner(System.in);
System.out.print("请输入要分类的字符串个数:");
num = Integer.valueOf(in.nextLine());
String[] strs = new String[num];
for(int i=1;i<=num;i++){
System.out.print("请输入要分类的第"+i+"个字符串:");
strs[i-1] = in.nextLine();
list.add(saveAsMap(strs[i-1]));
}
}
public static void Classification(){
int typeNum = num;
List<Map<Character, Integer>> relist=new ArrayList<Map<Character,Integer>>();
for(int i=0;i<list.size()-1;i++){
relist.add(list.get(i));
if(list.get(i).equals(list.get(i+1)) )
typeNum--;
}
list.removeAll(relist);
System.out.println("可以将输入的"+num+"个字符串分为"+typeNum+"类");
}
public static Map<Character, Integer> saveAsMap(String str){
Map<Character, Integer> map = new HashMap<Character, Integer>();
int length = str.length();
for(int i=0;i<length;i++){
char c = str.charAt(i);
if(null != map.get(c))
map.put(c, map.get(c)+1);
else
map.put(c,1);
}
System.out.println(map.toString());
return map;
}
}