Java怎么使用指针进行搜索
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要讲解了"Java怎么使用指针进行搜索",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java怎么使用指针进行搜索"吧!Given a str
千家信息网最后更新 2025年01月24日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();// Setset = 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安全错误
数据库的锁怎样保障安全
转让网络安全运维的公司
机房服务器指示灯说明
软件测试比软件开发难吗
服务器被新建管理员权限
数据库原理cot
软件开发属于元宇宙吗
山航软件开发
有网络安全比赛吗
广东数据网络安全工程联系方式
软件开发业绩提成方案
数据库更新不成功
scx是什么意思数据库
服务器无响应怎么办
数据库有磁盘大小吗
湖南 网络安全企业
编辑服务器ssr连接不能填
绍兴设备管理服务平台软件开发
2016中国软件开发者白皮书
数据库如何复制数据表
安全服务器名字
湖南学计算机软件开发薪资
南京常规软件开发价格大全
华为服务器供货问题
奕斯伟2022软件开发工程师
软件开发项目的流程
一汽红旗软件开发中心工作水平
齐鲁医院网络安全
php 线程安全 数据库
数据库学生成绩评语
儿童dna数据库哪个好