编写一个函数:
输入两个字符串
第一条:判断两个字符串是否是是相互打乱的
例如:“abc" 等于 ”cba"
第二条:两个字符串长度一样但是不能完全相等
例如:“abc" 不等于”abc"
第三条:接受输入特殊的字符,比如:“* & | + - # @ !”等
三条都成立的输出True,否则输出False
###################
输出例子:
[ ~/hjj ]# sh b.sh 'a+-3$8&' '-+a38$&'
true
[ ~/hjj ]# sh b.sh '#a+-3$8&' '#-+a38$&'
true
[ ~/hjj ]# sh b.sh '#a+-3$8& ' '#-+a38$ &'
true
######################
过几天后再发答案
还是没人能回复啊。先放个Python版本的。其实还有更简单的办法。
def fn(x,y):
if len(x) == len(y) and hash(x) != hash(y):
c = list(y)
for i in x:
if i in c:
c.remove(i)
if len(c) == 0:
return True
else:
return False
更简单的办法:
shell
#!/bin/bash
sort_(){
str=$(cat)
for (( i=0; i<${#str}; ++i ))
do
| echo ${str:i:1}
done|sort
}
a="$(echo "$1"|sort_)"
b="$(echo "$2"|sort_)"
if [ "$1" != "$2" -a "$a" == "$b" -a "${#a}" -eq "${#b}" ];then
echo "OK"
else
echo "False"
fi
python:
def fn(x,y):
if hash(x) != hash(y) and len(x) == len(y) and sortd(x) == sortd(y):
return True
else:
return False
陶小川 - less is more
return True if x != y and sorted(x) == sorted(y) else False
顺便提一下:题主的`sorted()`函数拼写有误
再来一个`pythonic`的
fn2 = lambda x, y: x != y and sorted(x) == sorted(y) or Falsec用习惯了,还是不太习惯shell的用法,没写判断一样和长度相同的,只实现了主要的一个要求,而且写的有点麻烦,凑合着看吧
#!/bin/bash
a="dcba=-"
b="abcd=-"
lena=${#a}
lenb=${#b}
flag=0
for(( i=0 ; i<$lena ; i++))
do
for(( j=0 ; j<$lenb; j++))
do
if [[ ${a[@]:$i:1} == ${b[@]:$j:1} ]];then
echo $b |sed -i "s/${b[@]:$j:1}/ /"
flag=1
break
fi
done
if [ $flag -eq 1 ]
then
flag=0
else
echo "false"
exit
fi
done
echo "true"
#!/bin/bash
rm -rf /tmp/string1-1.txt /tmp/string1-2.txt /tmp/string2-1.txt /tmp/string2-2.txt
string1=$1
string2=$2
len_string1=${#string1}
count=0
while [[ $count -lt $len_string1 ]]
do
count=$((count+1))
echo ${string1}|awk -F "" '{print $'"$count"'}' >> /tmp/string1-1.txt
done
cat /tmp/string1-1.txt|sort > /tmp/string1-2.txt
len_string2=${#string2}
count=0
while [[ $count -lt $len_string2 ]]
do
count=$((count+1))
echo ${string2}|awk -F "" '{print $'"$count"'}' >> /tmp/string2-1.txt
done
cat /tmp/string2-1.txt|sort > /tmp/string2-2.txt
if [ ! $string1 = $string2 ]
then
[[ -z `diff /tmp/string1-2.txt /tmp/string2-2.txt` ]] && echo "True" || echo "False"
else
echo "False"
fi
编辑回复