给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 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、此脚本中最重要的是处理的逻辑,即理解如何获取"无重复字符的子串",然后将步骤脚本化,在脚本化的过程中要考虑到各种需要处理的因素