EG“ William Shakespeare” =“我是一个虚弱的拼写者”都是Anagrams
e.g。 “ curie夫人” =“镭来了”
# function to cleanup a given argument by doing this:
# 1. Remove all alphanumerics
# 2. Convert to all lowercasing all characters
# 3. Sorting all characters
# 4. Stripping all newlines
prep() {
fold -w1 <<< "${1//[^[:alnum:]]/}" | tr '[:upper:]' '[:lower:]' | sort | tr -d '\n'
}
# function to check if given 2 arguments are anagrams
isAnagram() {
a=$(prep "$1")
b=$(prep "$2")
[[ $a = $b ]] && echo "yes" || echo "no";
}
致电他们使用:
isAnagram "William Shakespeare" "I am a weakish speller"
yes
isAnagram "Madam Curie" "Radium came"
yes
isAnagram "cat" "act"
yes
isAnagram "cat" "cot"
no
Python:
anagram.py脚本:
import sys
s1 = sys.argv[1]
s2 = sys.argv[2]
fmt = '"{:s}" and "{:s}" are{:s} anargams'
if sorted(s1.lower().translate(None,' \n\r\t')) == sorted(s2.lower().translate(None,' \n\r\t')):
print(fmt.format(s1, s2, ''))
else:
print(fmt.format(s1, s2, ' NOT'))
usage:
python anagrams.py "William Shakespeare" "I am a weakish speller"
输出:
"William Shakespeare" and "I am a weakish speller" are anargams
python anagrams.py "William Shakespeare" "William Hopkins"
输出:
"William Shakespeare" and "William Hopkins" are NOT anargams
awk -v s1="William Shakespeare" -v s2="I am a weakish speller" '
function chkTxt(s) {
split(tolower(s), arr, //)
asort(arr)
result=""
for(i=1;i<=length(arr);i++)
result = result""arr[i]
return result
}
BEGIN{
x=gsub(/[[:blank:]]/,"",s1)
y=gsub(/[[:blank:]]/,"",s2)
if (x+y==0 || (x&&y)) {
print chkTxt(s1)==chkTxt(s2)? "True":"False"
exit
}
print "False"
}'
在这里,您将两个字符串变量传递到
s1
和
s2
。
注:对于空间/空白检查,我注意到您的示例不限制空间的数量,但是,如果有空间,则两个字符串必须至少具有一个空间。像foo bar
和f o o ba r
一样。但是
foobar
和barf o o
不是。
上面的代码进行检查。
#!/bin/bash
#set -x
i=0
for letter in {A..Z}
do
alphabet[$i]="$letter"
((i++))
done
i=0
for digits in {0..25}
do
array[$i]=0
((i++))
done
read -p "Enter first word: " word1
read -p "Enter second word: " word2
while read -n 1 letter
do
if [ -z "$letter" ]
then continue
fi
for b in "${!alphabet[@]}"
do
if [ "$letter" = "${alphabet[$b]}" ]
then
((array[$b]+=1))
break
fi
done
done < <(echo "${word1^^}")
while read -n 1 letter
do
if [ -z "$letter" ]
then continue
fi
for b in "${!alphabet[@]}"
do
if [ "$letter" = "${alphabet[$b]}" ]
then
((array[$b]-=1))
break
fi
done
done < <(echo "${word2^^}")
echo -n "Words are "
for element in "${array[@]}"
do
if [ "$element" -ne 0 ]
then echo -n "not "
fi
done
echo "anagrams"
echo
exit
和函数
在字符串中的sort字符,并比较案例。 str1 =“ $ 1” str2 =“ $ 2”
SORTED1= $(Echo $ str1 | grep -io。| sort | tr -d” ”) sorted2 = $(echo $ str2 | grep -io。| sort | tr -d” ”)