面试题目,字符串的操作,希望能写出代码! 话不多说:直接上题: 输入:AAABBBCD 输出:3A3BCD 输入:ABCCCDDEF 输出:AB3C2DEF实际上就是把连续出现的字符用数字表示,这个程序用JAVA怎么写? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static String transform(final String input){ char[] data = input.toCharArray(); LinkedHashMap<Character,Integer> map = new LinkedHashMap<Character,Integer>(); for(char c:data){ if(!map.containsKey(c)){ map.put(c,1); }else{ map.put(c,map.get(c)+1); } } StringBuilder builder = new StringBuilder(); for(char c:map.keySet()){ if(map.get(c) != 1){ builder.append(map.get(c)); } builder.append(c); } return builder.toString(); } public static void main(final String[] args) { System.out.println(transform("AAABBBCD")); System.out.println(transform("ABCCCDDEF")); } 本帖最后由 AWUSOFT 于 2011-04-11 10:42:29 编辑 可用的方法太多也不用开额外的map存储直接用自动机的一些概念就可以秒杀final String str = "aaaabbbbbcccbbbbbd****$$$$$$$$$%%%%%%%%aaab"; int length = str.length(); char temp = str.charAt(0); int start = 0; for(int i=1;i<length;i++) { //循环比较,如果在某个位置的字符不等于temp,那么就输出start-i的子串 if(temp != str.charAt(i)) { System.out.print(String.valueOf(temp)+(i-start));// System.out.println(str.substring(start,i)); start = i; temp = str.charAt(i); } //特殊情况处理 if(i == length -1) { System.out.print(temp+"1");// System.out.println(str.substring(start, length)); } }或者直接用正则秒杀,更快final String str = "aaaabbbbbcccbbbbbd****$$$$$$$$$%%%%%%%%aaab"; String regex = "(?<=(\\S))(?!\\1)"; String []k = str.split(regex); for(int i = 0;i<k.length;i++){ System.out.print(k[i].charAt(0)+""+k[i].length());// System.out.println(k[i]); } 本帖最后由 AWUSOFT 于 2011-04-11 11:08:19 编辑 public static void transform(String src) { StringBuilder builder = new StringBuilder(); int len = src.length(); char curr = 0; int times = 1; for (int i = 0; i < len; ++i) { curr = src.charAt(i); char next = 0; try { next = src.charAt(i + 1); } catch (IndexOutOfBoundsException e) { } if (curr != next) { if (times > 1) { builder.append(times); } builder.append(curr); times = 1; } else { ++times; } } System.out.println(builder.toString()); } public static void main(String[] args) { transform("AAABBCD"); transform("ABCCCDDEF "); } eclipse 问题。。 请问 提取文本框中的输入数字到自己的算法中怎么总有错误 改写VIEWPART关闭时的关闭事件 做一个记事文体! 求助java中报表问题! 问一个下拉框的问题? 为什么Vector 在Applet中不能使用? 请问在weblogic6上如何undeploy一个application?? 这道思维逻辑题能解开吗? 如何用已有的证书文件和私钥文件生成keystore 使用HashSet<T>有什么 要求吗 几个面试题目,大家来看看
char[] data = input.toCharArray();
LinkedHashMap<Character,Integer> map = new LinkedHashMap<Character,Integer>();
for(char c:data){
if(!map.containsKey(c)){
map.put(c,1);
}else{
map.put(c,map.get(c)+1);
}
}
StringBuilder builder = new StringBuilder();
for(char c:map.keySet()){
if(map.get(c) != 1){
builder.append(map.get(c));
}
builder.append(c);
}
return builder.toString();
}
public static void main(final String[] args) {
System.out.println(transform("AAABBBCD"));
System.out.println(transform("ABCCCDDEF"));
}
也不用开额外的map存储
直接用自动机的一些概念就可以秒杀
final String str = "aaaabbbbbcccbbbbbd****$$$$$$$$$%%%%%%%%aaab";
int length = str.length();
char temp = str.charAt(0);
int start = 0;
for(int i=1;i<length;i++) {
//循环比较,如果在某个位置的字符不等于temp,那么就输出start-i的子串
if(temp != str.charAt(i)) {
System.out.print(String.valueOf(temp)+(i-start));
// System.out.println(str.substring(start,i));
start = i;
temp = str.charAt(i);
}
//特殊情况处理
if(i == length -1) {
System.out.print(temp+"1");
// System.out.println(str.substring(start, length));
}
}
或者直接用正则秒杀,更快
final String str = "aaaabbbbbcccbbbbbd****$$$$$$$$$%%%%%%%%aaab";
String regex = "(?<=(\\S))(?!\\1)";
String []k = str.split(regex);
for(int i = 0;i<k.length;i++){
System.out.print(k[i].charAt(0)+""+k[i].length());
// System.out.println(k[i]);
}
public static void transform(String src) {
StringBuilder builder = new StringBuilder();
int len = src.length();
char curr = 0;
int times = 1;
for (int i = 0; i < len; ++i) {
curr = src.charAt(i);
char next = 0;
try {
next = src.charAt(i + 1);
} catch (IndexOutOfBoundsException e) {
}
if (curr != next) {
if (times > 1) {
builder.append(times);
}
builder.append(curr);
times = 1;
} else {
++times;
}
}
System.out.println(builder.toString());
} public static void main(String[] args) {
transform("AAABBCD");
transform("ABCCCDDEF ");
}