【无标题】

00后博主,正在自学中,有什么想法大家一起分享

🤳博主主页:Copping0606 😁
博主定期更新🤦‍♂️
谢谢你那么好看还关注我💖

算法题

这几天在刷算法,所有就分享一下我解题的过程,话不多说上题
在这里插入图片描述
这一题我认为也是还算简单的题,首先我们看看leetCode他给出的提示

提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

当然也是没多大用,我们还是看题,题意大概就是我给你给字符串你必须给我返回这个字符串中没有重复的最长的那一个子字符串。
在这里插入代码片后我就一顿啪啪的编写了一段代码如下:

public class LeetCode3 {
    //计算一个字符串中最长的子字符串
    public static int lengthOfLongestSubstring(String s) {
        //初始化记录记录上一个字串变量
        StringBuffer longest=new StringBuffer();
        //初始化记录记录当前字串变量
        StringBuffer nowDataStr=new StringBuffer();
        //遍历字串
        for (int i=0;i<s.length();i++){
            //覆盖字串
            String nowData = String.valueOf(s.charAt(i));
            if (nowDataStr.toString().contains(nowData)){
                nowDataStr=new StringBuffer();
            }
            nowDataStr.append(nowData);
            if (nowDataStr.length()>longest.length()){
                longest = nowDataStr;
            }
        }
        return longest.length();
    }

    public static void main(String[] args) {
        String str="abcddcabef";
        int a=lengthOfLongestSubstring(str);
        System.out.println(a);
    }

这时放在leetcode一看,嗯基本实列全过,提交~ding报错,实列800多个实列只过了300过一看问题当我字符串为dvdf时代码问题就出来了。如图
在这里插入图片描述
结果在这里插入图片描述这里很明显不对,当串为dvdf时,应该时,最长的应该是vdf这一串,经过思考我发现我并没有考虑到当字串重复后需要将他重复的那个字符串之后的串拿过来,所以又改良了下代码如下

public class LeetCode3 {
    //计算一个字符串中最长的子字符串
    public static int lengthOfLongestSubstring(String s) {
        //初始化记录记录上一个字串变量
        StringBuffer longest=new StringBuffer();
        //初始化记录记录当前字串变量
        StringBuffer nowDataStr=new StringBuffer();
        //遍历字串
        for (int i=0;i<s.length();i++){
            //覆盖字串
            String nowData = String.valueOf(s.charAt(i));
            if (nowDataStr.toString().contains(nowData)){
                //获取从上一个字串中重复位置之后的字串
                nowData=nowDataStr.substring(nowDataStr.indexOf(nowData)+1)+nowData;
                nowDataStr=new StringBuffer();
            }
            nowDataStr.append(nowData);
            if (nowDataStr.length()>longest.length()){
                longest = nowDataStr;
            }
        }
        return longest.length();
    }

    public static void main(String[] args) {
        String str="dvdf";
        int a=lengthOfLongestSubstring(str);
        System.out.println(a);
    }
}

然后测试了下下也是没有问题
再次提交到leetcode也是没有问题。
虽然可能我的代码不是最优解,但是至少能独立去做出来,也是相当哇塞了。
好了这一题也就没了。喜欢的别忘了给个关注。💖💖💖💖💖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coping0606

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值