来个有难度的练习(可以用sell python 或者你认为能解决的语言)

回复 收藏

编写一个函数:

输入两个字符串

第一条:判断两个字符串是否是是相互打乱的

例如:“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

######################

过几天后再发答案

2016-11-15 18:27 举报
已邀请:
0

ggangelo

赞同来自:

i_f31.gif还是没人能回复啊。先放个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

0

ggangelo

赞同来自:

更简单的办法:

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


0

陶小川 - less is more

赞同来自:

def fn1(x, y):
    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 False

0

51xlinux

赞同来自:

c用习惯了,还是不太习惯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"

0

chiang1213

赞同来自:

#!/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

0

chiang1213

赞同来自:

shell的这段

do

|  echo ${str:i:1} 

done|sort

是不是应该是

do

echo ${str:i:1}

done|sort

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: