该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-30
最后修改:2009-11-30
2)假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)?
public class ReplaceChar { public static void main(String[] args) { String target = "ab3"; String content = "rfwab3teab3ab3ab3ab3ab3tesabte"; char[] replace = target.toCharArray(); char[] data = content.toCharArray(); char[] result = new char[data.length]; int size = 0; for (int i = 0; i < data.length; i++) { if (data[i] == replace[0]) { boolean isMatch = true; for (int j = 1; j < replace.length; j++) { if (data[i + j] != replace[j]) { isMatch = false; break; } } if (isMatch) { i += replace.length - 1; } else { result[size++] = data[i]; } } else { result[size++] = data[i]; } } String str = new String(result, 0, size); System.out.println(str); } } |
|
返回顶楼 | |
发表时间:2009-11-30
8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户? 怎么处理???? |
|
返回顶楼 | |
发表时间:2009-11-30
egmacross 写道 2)假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)?
这个不用内置的能有啥好方法吗? public static main(String[] args){ System.out.print("6scsssfsfs"); } 应该没有比这个更快的了 |
|
返回顶楼 | |
发表时间:2009-11-30
最后修改:2009-11-30
2)假如有字符串“6sabcsssfsfs33” ,用最(有)快速的方法去掉字符“a”,“b”,“3”(字符串“ab3”),不能用java内置字符串方法(indeOf,substring,replaceAll等)?
--------------------------------- 关于这类题目,有些浮躁的程序员很是不屑,觉得既然java提供了(indeOf,substring,replaceAll等),为什么不能用呢,这不是刻意为难人嘛。其实这类人完全想错了,像这类的需求(笔试需求),就不应该用基于String对象的方法,就应该将“字符串”转化为“字符数组”来运算,因为算法还是基于基本类型+数组才是最快的。大家如果感兴趣可以看一下Collections.sort(XX),不管你传什么类型的集合的XX给它,它都会转化为数组来运算。既然是考算法,那么请你抓住关键点,转化为基本类型+数组来运算吧。 所以,有人已经给出了答案的关键 char[] originalCharArray= "6sabcsssfsfs33".toCharArray(); 如果我的理解不当,欢迎斧正。 |
|
返回顶楼 | |
发表时间:2009-11-30
linyvlu 写道 StringBuilder sb = new StringBuilder("6sabcsssfsfs33"); sb.delete(2, 4); sb.delete(sb.length()-2, sb.length()); 此人为牛人也,佩服。 |
|
返回顶楼 | |
发表时间:2009-11-30
pan_java 写道 8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户? 怎么处理???? 是啊,俺也想知道,高手们讨论下这些性能问题吧:) |
|
返回顶楼 | |
发表时间:2009-11-30
congdepeng 写道 2)假如有字符串“6sabcsssfsfs33” ,用最(有)快速的方法去掉字符“a”,“b”,“3”(字符串“ab3”),不能用java内置字符串方法(indeOf,substring,replaceAll等)?
--------------------------------- 关于这类题目,有些浮躁的程序员很是不屑,觉得既然java提供了(indeOf,substring,replaceAll等),为什么不能用呢,这不是刻意为难人嘛。其实这类人完全想错了,像这类的需求(笔试需求),就不应该用基于String对象的方法,就应该将“字符串”转化为“字符数组”来运算,因为算法还是基于基本类型+数组才是最快的。大家如果感兴趣可以看一下Collections.sort(XX),不管你传什么类型的集合的XX给它,它都会转化为数组来运算。既然是考算法,那么请你抓住关键点,转化为基本类型+数组来运算吧。 所以,有人已经给出了答案的关键 char[] originalCharArray= "6sabcsssfsfs33".toCharArray(); 如果我的理解不当,欢迎斧正。 根本就是这种题无聊... 不用java内置字符串方法,toCharArray()难道不是java内置字符串方法? 那只能自己按照JDK源码toCharArray()方法的形式写一个转换方法,用System.arraycopy了 这个还好,更有不让使用java提供的方法的...我真怀疑是那些出题的对着抄,结果把题目抄错了的 苍天啊,不用java提供的方法,怎么把字符串转换成字符数组,以后还怎么进行啊 难不成再像System.arraycopy那样写个native方法不成? |
|
返回顶楼 | |
发表时间:2009-11-30
aniu2008 写道 pan_java 写道 8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户? 怎么处理???? 是啊,俺也想知道,高手们讨论下这些性能问题吧:) 期待大牛解答!! |
|
返回顶楼 | |
发表时间:2009-11-30
ruvuoai 写道 aniu2008 写道 pan_java 写道 8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户? 怎么处理???? 是啊,俺也想知道,高手们讨论下这些性能问题吧:) 期待大牛解答!! 同样期待,为这些性能题郁闷很久了~!~ |
|
返回顶楼 | |
发表时间:2009-11-30
还是第一次听说这个叫做KMP的算法,孤陋寡闻了。查了半天资料看的云里雾里的
,写资料的都喜欢整术语,生怕别人看懂。干脆不看了,自己去写。那位给拍拍砖 package com.saturday; public class KMP { public static String myReplaceAll( String input, String replaced){ //短路掉不可能匹配的情况 if(replaced.equals("") ||input.length()<replaced.length()){ return input; } StringBuffer buf=new StringBuffer(); char[] s=input.toCharArray(); char[] r=replaced.toCharArray(); int rLen=r.length; int matchCount; for(int i=0,sLen=s.length;i<sLen;){ if(i<sLen-rLen){ //检查匹配 matchCount=0; for(int j=0;j<rLen;j++){ if(s[i+j]==r[j]){ matchCount++; }else{ break; } } //完全匹配 if(matchCount==rLen){ i+=rLen; continue; } //部分匹配 if(matchCount>0){ for(int j=0;j<matchCount;j++){ buf.append(s[i++]); } continue; } } buf.append(s[i++]); } return buf.toString(); } public static void main(String[] args){ String input="123 mfc mf fc mfdC mfmfc cmfc dd abc"; String replaced="1234"; System.out.println( myReplaceAll(input,replaced).equals(input.replaceAll(replaced,"")) ); } } |
|
返回顶楼 | |