2019/10/18【无重复字符的最长字串】

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

#!/bin/bash
#无重复字符的最长子串
#author:yzt [2019-10-18]
echo "$1"|sed 's#[][]*#\n#g'|egrep -v "^$" >tmp.txt
num_1=`cat tmp.txt|wc -l`
num_2=$[$num_1-1]
declare -i aa=0
declare -i bb=0
declare -A shuzu=()
declare -i num_4=0
echo "" >result.txt
for item in `cat tmp.txt`
do
        shuzu[$aa]=$item
        aa=$[$aa+1]
done
#echo "${#shuzu[@]}"
while :
do
        zifu=${shuzu[$bb]}
        num_3=$[$bb+2]
        if [ $num_3 -le $num_1 ];then
                sed -n -e "$num_3,"$num_1"p" tmp.txt >tmp1.txt
                grep -w "$zifu" tmp1.txt&>/dev/null
                if [ $? -ne 0 ];then
                        flag=true
                        num_4=$[$num_4+1]
                        bb=$[$bb+1]
                else
                        num_5=`grep -n -w "$zifu" tmp1.txt|head -n1|awk -F: '{print $1}'`
                        if [ $num_5 -ne 1 ];then
                                num_6=$[$num_5-1]
                                cc=`sed -n -e "1,"$num_6"p" tmp1.txt |sort |uniq -c|awk '$1>1{print $1}'`
                                if [ $cc = $null ];then
                                        numii=$[$num_5+$num_4]
                                        num_4=0
                                        echo "$numii" >>result.txt
                                        bb=$[$bb+$num_5+1]
                                else
                                        bb=$[$bb+1]
                                        echo "1" >>result.txt
                                fi
                        else
                                bb=$[$bb+1]
                                num_4=0
                                echo "1" >>result.txt
                        fi
                fi
        else
                sed -n -e ""$num_3"p" tmp.txt >tmp1.txt
                num_4=$[$num_4+1]
                echo "$num_4">>result.txt
                break
        fi
done
number=`cat result.txt|sort -nr |head -n1`
echo "$number"

 【脚本效果】

脚本解析:

1、此脚本的具体语句就不一一介绍了,有兴趣的朋友可以细读一下。因为这需求在leetcode中并不是要用shell写出来的,个人觉得可以实现,所以就写了

2、此脚本中最重要的是处理的逻辑,即理解如何获取"无重复字符的子串",然后将步骤脚本化,在脚本化的过程中要考虑到各种需要处理的因素

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值