问题:
JAVA算法题:求无重复字符的最长子串
解题过程:
键盘录入一串字符,创建哈希表对字符进行遍历存储比较,定义开始位置为start,结尾位置为end.遍历过程中,当遇到字符相同的情况,利用哈希表的key值,value值,将相同字符作为key寻找到value,并将start位置更新到这个相同字符处继续进行遍历,每次遍历都会比较字串的大小更新结果,同时也更新哈希表中的元素.
代码
代码如下:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class zuichangzichuan {
public int lengthOfLongestSubstring(String s) {
int n = s.length(),result = 0;
//创建一个哈希表
Map<Character,Integer> map = new HashMap<>();
for (int start = 0,end = 0;end<n;end++){
//charAt 返回指定索引位置的处的字符,超出有效范围的索引值返回空字符串。
char ele = s.charAt(end);
//判断该key在map中是否有key存在。
if (map.containsKey(ele)){
//Math.max(参数1,参数2)是一个静态的工du具方法,
// 主要用来比较两个相zhi同类型参数的大小,支持的类型有double,float,int,long四种类型.
//get(key)指定键映射到的值,如果此映射不包含键的映射,则为NULL。
start = Math.max(map.get(ele),start);
}
//比较原来最大子字符串长度与新子字符串的长度
result = Math.max(result,end-start+1);
//V.put(K key, V value)key - 与指定值相关联的键。
// value - 与指定键关联的值。
//当存在这个key的时候,新的会覆盖掉原来的value并返回oldvalue,也就是旧值
map.put(s.charAt(end),end+1);
}
System.out.println("最大子字符串的长度为:");
return result;
}
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
zuichangzichuan lengthOfLongestSubstring = new zuichangzichuan();
System.out.println(lengthOfLongestSubstring.lengthOfLongestSubstring(s));
}
}
总结
以上就是如何去求无重复字符的最长子串,其中charAt ()返回指定索引位置的处的字符,超出有效范围的索引值返回空字符串;
containsKey()判断该key在map中是否有key存在;
Math.max(参数1,参数2)是一个静态的工du具方法,主要用来比较两个相zhi同类型参数的大小,支持的类型有double,float,int,long四种类型.
get(key)指定键映射到的值,如果此映射不包含键的映射,则为NULL。
V.put(K key, V value)key - 与指定值相关联的键。value - 与指定键关联的值。当存在这个key的时候,新的会覆盖掉原来的value并返回oldvalue,也就是旧值;