算法题目

 

 1.题目不难,难得地方在于对于这一反转得使用技巧

关于Set的方法的使用,其中Set判断数据是否相同是根据

复制代码
package two24;

import java.util.HashSet;
import java.util.Set;

class Solution3 {


    public int lengthOfLongestSubstring(String s) {


//        先设置int数组得长度,每一个字符出现一次,在相应的ascll码上加1
//        最后记数的时候只需要判断有多少个不是0就行了,但是有一个要求就是必须是连续的,那就有一点难度了
//        那么咱们每次遇到重复的时候就要回到原来的位置,并且在下标上面加1,然后重新去记数。直到
//        后面的数小于max(最长的子序列)
//        那么就不是加一了,而是记录该位置的下标,每一次运行都需要将数组清0


//        上面是之前的想法,但是同样咱们也可以使用Set方法来完成
//        Set里面的所谓的重复的要求是地址与里面的数据完全相同

        Set<Character> arr = new HashSet<Character>();
//        那咱们把String转换成int类型的数据是不是就行了
        int i,max = 0,MAX = 0,start = 0;
//      这样就可以了??Set接收char类型的数据是Character
        char[] arry = s.toCharArray();
        for(i = 0; i < s.length(); i++)
        {
            if(arr.add(arry[i]))
            {
                if(max==0){
                    start = i;
                }
                max++;
            }else{
                max=0;
                i = start;
                arr.clear();
            }
            if(max > MAX)
            {
                MAX = max;
            }
        }
        return MAX;
    }

}
复制代码

超过16%,采用set来做的,

1.首先将String类型的数据转换成char的数据(因为set判断一个数据是否为重复的需要两方面全相等才算【具体我也讲不清】)

2.将char里面的数据传进去,并且记录第一次出现的位置

3.当出现重复要将原来arr里面的数据全部清除,并且从下一个start开始

花的时间比较长,但是无伤大雅

复制代码
class Solution {
    public int lengthOfLongestSubstring(String s) {
         int[] num = new int[128];
        for (int i = 0; i < 128; i++) {
            num[i] = -1;
        }
//        获取s的长度
        int m=s.length();
//        start代表起始的位置,res代表长度
        int start  = 0;
        int res = 0;

        for (int i = 0; i < s.length();i++) {
            int index = s.charAt(i);
            start = Math.max(start,num[index]+1);
            res = Math.max(res,i-start+1);
            num[index]= i;
        }


        return res;
    }
}
复制代码

别个的神奇算法

复制代码
package two24;

public class Solution20 {
    public boolean isValid(String s) {

//        首先最简单的方法就是简单的判断,判断下一个数据与原先的数据的比较
//        尝试更简单的方法
//        终究还是晚了一步,唉被别个先想到了
        int length = s.length() / 2;
        for (int i = 0; i < length; i++) {
            s = s.replace("()", "").replace("{}", "").replace("[]", "");
        }

        return s.length() == 0;
    }
}
复制代码

这个和我思路一样,但是我的还是存在些许错误,主要还是执行了一下就没了

复制代码
class Solution {
    public boolean isValid(String s) {


//        首先最简单的方法就是简单的判断,判断下一个数据与原先的数据的比较
//        尝试更简单的方法
       s.replace("[]",null);
       s.replace("{}",null);
       s.replace("()",null);
       
       if(s!=null)
       {
           return false;
       }


        return true;
    }
}
复制代码

不晓得啥原因,回头看看

posted @   湖南陈冠希  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示