Java怎么使用指针进行搜索
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要讲解了"Java怎么使用指针进行搜索",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java怎么使用指针进行搜索"吧!Given a str
千家信息网最后更新 2025年12月01日Java怎么使用指针进行搜索
这篇文章主要讲解了"Java怎么使用指针进行搜索",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java怎么使用指针进行搜索"吧!
Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", with the length of 1. Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring;"pwke" is a subsequence and not a substring.*
package com.lifeibigdata.algorithms.leetcode;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;/** * Created by lifei on 16/5/27. * * 时间复杂度为O(N)的算法 使用i和j两个指针进行搜索,i代表候选的最长子串的开头,j代表候选的最长子串的结尾。 先假设i不动,那么在理想的情况下,我们希望可以一直右移j,直到j到达原字符串的结尾,此时j-i就构成了一个候选的最长子串。每次都维护一个max_length,就可以选出最长子串了。 实际情况是,不一定可以一直右移j,如果字符j已经重复出现过(假设i在位置k),就需要停止右移了。记录当前的候选子串并和max_length做比较。接下来为下一次搜寻做准备。 在下一次搜寻中,i应该更新到k+1。这句话的意思是,用这个例子来理解,abcdef是个不重复的子串,abcdefc中(为了方便记录为abc1defc2),c1和c2重复了。 那么下一次搜寻,应该跨过出现重复的地方进行,否则找出来的候选串依然有重复字符,且长度还不如上次的搜索。所以下一次搜索,直接从c1的下一个字符d开始进行, 也就是说,下一次搜寻中,i应该更新到k+1 */public class LengthOfLongestSubstring { public static void main(String[] args) { LengthOfLongestSubstring lols = new LengthOfLongestSubstring(); System.out.println(lols.lengthOfLongestSubstring("abcdefcgh")); } public int lengthOfLongestSubstring(String s) { int n = s.length(), ans = 0; int[] index = new int[128]; // current index of character // try to extend the range [i, j] for (int j = 0, i = 0; j < n; ++j) { i = Math.max(index[s.charAt(j)], i);//index['a']会将char转为ascII码,a是97 ans = Math.max(ans, j - i + 1); index[s.charAt(j)] = j + 1; //将j所在的值,的对应位置存到index数组中 } return ans; }// public int lengthOfLongestSubstring(String s) {// int n = s.length();// Set set = new HashSet<>();// int ans = 0, i = 0, j = 0;// while (i < n && j < n) {// // try to extend the range [i, j]// if (!set.contains(s.charAt(j))){ //如果j没有出现重复字符,将j添加到set中,这个过程中,i保持不变// set.add(s.charAt(j++));// ans = Math.max(ans, j - i); //比较获取最大的ans// }// else { //出现重复字符,这个字符在i-j之间,所以从i开始逐个删除,直到不包含重复字符// set.remove(s.charAt(i++));// }// }// return ans;// }// public int lengthOfLongestSubstring(String s) { //使用map存储字母和索引// int n = s.length(), ans = 0;// Map map = new HashMap<>(); // current index of character// // try to extend the range [i, j]// for (int j = 0, i = 0; j < n; ++j) {// if (map.containsKey(s.charAt(j))) {// i = Math.max(map.get(s.charAt(j)), i);// }// ans = Math.max(ans, j - i + 1);// map.put(s.charAt(j), j + 1);// }// return ans;// }// public int lengthOfLongestSubstring(String s) {// int n = s.length();// int ans = 0;// for (int i = 0; i < n; ++i)// for (int j = i + 1; j <= n; ++j)// if (allUnique(s, i, j)) ans = Math.max(ans, j - i);// return ans;// }//// public boolean allUnique(String s, int start, int end) {// Set set = new HashSet<>();// for (int i = start; i < end; ++i) {// Character ch = s.charAt(i);// if (set.contains(ch)) return false;// set.add(ch);// }// return true;// }} 感谢各位的阅读,以上就是"Java怎么使用指针进行搜索"的内容了,经过本文的学习后,相信大家对Java怎么使用指针进行搜索这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
字符
搜索
指针
最长
情况
学习
代表
位置
内容
更新
复杂
接下来
两个
之间
也就是
也就是说
在理
地方
复杂度
字母
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
给了数据库账号和密码如何备份
华服互联网科技面试
手机怎么代理到电脑服务器
阿里云买完服务器后去哪里开启
服务器防护栏
网络安全中常见的攻击类型
进口软件开发工具生产
gan 网络安全
镇江软件开发流程
河北商城软件开发要多少钱
易语言 mysql数据库
美国通讯网络技术公司
开展网络安全法律法规宣传活动
无线网络技术教程大题
河北网络技术学校
安全知识网络安全知识网课
数据库起名
乐川网络技术
智能安全行车服务器idas
三级网络技术文案高级
mix数据库
c 基于数据库身份验证
游戏软件开发的工作职责
疫情下网络安全技术
nginx搭建视频服务器
数据库管理亮点
宜宾网络安全审计招聘
无法连接至服务器未知的主机
在数据库中字段名可以相同吗
企业与网络技术的期末考试