您的位置:首页 > 其它

美团2015笔试题以及最优解(二)

2015-12-22 10:36 375 查看
题目:

 * 给定一个字符串 str,返回 str 的最长无重复字符子串的长度。

 * 举例,str="abcd",

 * 返回 4。

 * str="aabcb",

 * 最长无重复字符子串为"abc",
 * 返回 3。  

算法思路:这是一个标准的最长无重复子串的问题,只需要利用哈希表记录当前元素出现的历史位置,通过比较即可实现算法。(QQ:3036643587 欢迎交流)

/**
* 给定一个字符串 str,返回 str 的最长无重复字符子串的长度。
* 举例,str="abcd",
* 返回 4。
* str="aabcb",
* 最长无重复字符子串为"abc",
* 返回 3。
* @author Administrator
*
*/
public class LongestNoReportSubString {

public static int getLongestSub(String s){
if(s==null||s.equals("")){
return 0;
}
int[] map = new int[256];
for(int i=0;i<256;i++){
map[i] = -1;
}
int pre = -1;
int len = 0;
char[] arr = s.toCharArray();
for(int i=0;i<arr.length;i++){
pre = Math.max(pre, map[arr[i]]);
len = Math.max(len, i-pre);
map[arr[i]] = i;
}
return len;
}
public static void main(String[] args) {
String s = "aabcbb";
System.out.println("最长无重复子串的长度是"+getLongestSub(s));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: