leetcode: longest-substring-without-repeating-characters

题目描述:

给定一个字符串,找到最长子字符串的长度而不重复字符。
例如,没有重复 “abcabcbb” 字母的最长子字符串是 “abc”,其长度为3.
对于 “bbbbb”,最长的子字符串是 “b”,长度为 1。

解题思路:

  1. 题目很好理解,就是求给定字符串的最大字串长度
  2. 这里大致的思想就是求滑动窗口的最大值
  3. 使用一个 sbString 存储当前窗口的字符串
  4. 取出原始数组中的每一个字符,看看其是否出现在 sbString 中
  5. 若没有出现,将 sbString 字符串扩充,若出现,则截取 sbString 串,成为新的 sbString
  6. 在操作的过程中不断的更替最大字串 res 的长度

代码如下:

    public int lengthOfLongestSubstring(String s) {
        if (s.length() < 1 || s == null) return 0;

        int maxlen = 1;
        int res = 1;
        String sbString = String.valueOf(s.charAt(0));

        for (int i = 1; i < s.length(); i++) {
            char temp = s.charAt(i);

	    // 判断当前字符是否出现在 sbString 中
            int j = 0;
            while (j < sbString.length()) {
                if (temp == sbString.charAt(j)) {
                    break;
                }
                j++;
            }

	    // 若不在 sbString 中,将其添加到 sbString 的末尾,并更新当前字符串的长度和 res 的长度
            if( j >= sbString.length()){
                sbString += temp;
                maxlen++;
                res = Math.max(maxlen,res);
            }
            else
            {
		// 若出现在 sbString 中,则重新选定 sbString,以及它的长度
                sbString = sbString.substring(j + 1,sbString.length()) + temp;
                res = Math.max(maxlen,res);
                maxlen = sbString.length();

            }
        }
        return res;
    }

转载于:https://my.oschina.net/happywe/blog/3074007

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值