字符串或单词可以是任意长度。
例如“William Shakespeare”=“我是一个弱势的拼写者”两者都是字谜
E.g。 “居里夫人”=“镭来了”
答案 0 :(得分:3)
这可能对您有用:
# 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
答案 1 :(得分:1)
使用 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'))
用法:
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
答案 2 :(得分:0)
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
不是。
以上代码进行检查。