-
java二道面试题5
2个问题
1.有一个邮箱,有一千万条黑名单用户,怎么判断收件箱是不是黑名单用户。
据说和字典什么的是属于同一个经典问题。。
2.求一个字符串中最长的颠倒字符串。。
比如 a123ghfuhg321asd131.(就是a123,321a.)2014年8月21日 13:34
5个答案 按时间排序 按投票排序
-
采纳的答案
1.有一个邮箱,有一千万条黑名单用户,怎么判断收件箱是不是黑名单用户。
据说和字典什么的是属于同一个经典问题。。
这个肯定是用布隆过滤算法,楼主可以网上去找找算法. 用map的瓶颈就是内存.
优点:对比用MAP来存储,内存需要量急剧减少.检索速度超快.
缺点:会有一定的误判,会把不是黑名单的判断成黑名单.但是不会漏判断.
2.求一个字符串中最长的颠倒字符串。。
比如 a123ghfuhg321asd131.(就是a123,321a.)
这个问题不是几句话能搞明白,楼主可以看看这个博客.里面有大量的算法分析.
http://blog.csdn.net/v_july_v
http://blog.csdn.net/v_july_v/article/details/70418272014年8月22日 08:50
-
public class Test { /** * @param args */ public static void main(String[] args) { String a = "jha123ghfs343uhg321asd131"; String str1 = null, str2 = null, tmpstr1 = null, tmpstr2 = null, maxstr1 = null, maxstr2 = null; for (int i = 0; i < a.length() - 2; i++) { for (int j = 2 + i; j < a.length() - 1; j++) { if (j > i) { str1 = a.substring(i, j); if (str1 != null && !str1.equals("") && str1.length() > 1) { str2 = (new StringBuilder(str1)).reverse().toString(); if (a.indexOf(str2) == -1) { if (tmpstr1 != null && (maxstr1 == null || tmpstr1.length() > maxstr1.length())) { maxstr1 = tmpstr1; maxstr2 = tmpstr2; } break; } else { tmpstr1 = str1; tmpstr2 = str2; } } } } } System.out.println("字符串中最长的颠倒字符串:"+maxstr1 + "," + maxstr2); } }
运行输出,字符串中最长的颠倒字符串:a123gh,hg321a2014年8月23日 22:26
-
第二道题code
package com.test1;
/**
* 最大长颠倒字符串 它的长度应该小于等于整个字符串(长度为L)的的一半
* 从假设最大颠倒长度为整个的1/2L 然后查这个长度的颠倒字符串是否存在 存在就返回,不存在,则继续往下找1/2L-1,以此类推1/2L-1....一直到0。如果为0说明没有
*
*/
public class ResStrLong {
public static void main(String[] args) {
String string="a123ghfuhg321asd131";
String revString=getLongString(string);
}
public static String getLongString(String string)
{ int maxStr=string.length()/2;
int len=string.length();
String revString=null;
boolean flag=false;
for(int i=maxStr;i>=0;i--){
for (int j = 0; j <len; j++) {
if((j+i+1)>(len-1))continue;
String subString=string.substring(j,j+i+1);
revString=new StringBuffer(subString).reverse().toString();
int flag1=string.indexOf(revString);
if(flag1!=-1){flag=true;System.out.println(subString+":"+revString+";"+i);break;}
}
if(flag)break;
}
return revString;
}
}2014年8月21日 22:01
-
第一个问题应该是考,怎么存这一千万条数据,使判断是不是黑名单用户的耗时最少。
这也是分词器字典需要使用的数据结构。之前看IK分词的词典是使用树结构存储的;父节点使用hashmap存储子节点对象;每个节点的值是一个char。
http://blog.csdn.net/guwenwu285/article/details/9617057
第二个http://blog.csdn.net/hopeztm/article/details/7932245的思路二的方法:package snippet; public class Solution { private static int[] next; private static void GetNext(String s)// KMP求next数组 { int i, j; i = 0; j = -1; next[0] = -1; while (i < s.length()) { if (j == -1 || s.charAt(i) == s.charAt(j)) { i++; j++; next[i] = j; } else { j = next[j]; } } } private static int compare(String pattern, String s) // 用KMP算法做求出最长的前缀匹配 { int i, j; i = 0; j = 0; int maxLen = 0; while (i < s.length()) { if (j == -1 || pattern.charAt(j) == s.charAt(i)) { i++; j++; } else { j = next[j]; } if (j > maxLen) { maxLen = j; } if (j == pattern.length()) { return maxLen; } } return maxLen; } public static String longestPalindrome(String s) // { // Start typing your Java solution below // DO NOT write main() function String reverString = new StringBuilder(s).reverse().toString(); // 求得到 // 输入string // 的reverse next = new int[s.length() + 1]; String maxPal = ""; int maxLen = 0; int len; for (int i = 0; i < s.length(); i++) // 枚举所有后缀 { String suffix = reverString.substring(i); if (suffix.length() < maxLen) { break; } GetNext(suffix); len = compare(suffix, s); if (len > maxLen) { maxPal = suffix.substring(0, len); maxLen = len; } } return maxPal; } public static void main(String[] args) { System.out.println(longestPalindrome("a123ghfuhg321asd131")); System.out.println(longestPalindrome("a123ghuhg321asd131")); } }
2014年8月21日 15:15
相关推荐
藏区特产销售平台--论文.zip
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
该单片机项目可作为课程设计和期末大作业或者毕设,项目完整,有原理图和代码,需要的自行下载即可!
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载