文字列が回文かどうかを検出する再帰関数を作成するのに助けが必要です。しかし、再帰的でなければならないループは使用できません。誰でもこれがどのように行われるかを教えてくれますか? 私はPythonを使用しています。
11 に答える
def ispalindrome(word):
if len(word) < 2: return True
if word[0] != word[-1]: return False
return ispalindrome(word[1:-1])
そして、これが最高のワンライナーです
def ispalindrome(word):
return word == word[::-1]
文字列の長さが0文字または1文字の場合、それは回文です。
文字列の最初と最後の文字が同じで、残りの文字(Pythonではスライスだと思います[1: -1]
が、私のPythonは少し錆びています)が回文である場合、それは回文です。
さて、それを文字列を取る回文関数として書いてください。自分自身を呼び出します。
とにかくコードを投稿していて、ワンライナーはまだ投稿されていないので、ここに行きます:
def palindrome(s):
return len(s) < 2 or s[0] == s[-1] and palindrome(s[1:-1])
ここに別の視点があります
パリンドローム文字列は
いくつかの文字、x .
いくつかのパリンドローム部分文字列。
同じ文字xの繰り返し。
また、「Able was I ere I saw Elba.」という適切な英文が表示される場合があることに注意してください。句読点付き。回文チェッカーは、句読点を静かにスキップする必要がある場合があります。また、大文字と小文字を区別せずに静かに一致させる必要がある場合もあります。これはもう少し複雑です。
いくつかの先頭の句読点。いくつかの文字、x .
いくつかの回文部分文字列。
大文字と小文字を区別せずに繰り返される文字x 。いくつかの末尾の句読点。
また、定義上、長さ 0 の文字列は回文です。また、1 文字の文字列 (句読点を削除した後) も回文です。
単純な再帰関数を考える方法は次のとおりです...問題をひっくり返して、そのように考えてください。どのように回文を再帰的に作成しますか? これが私がそれを行う方法です...
def make_palindrome():
maybe:
return ""
elsemaybe:
return some_char()
else:
c = some_char()
return c + make_palindrome() + c
次に、それを裏返してテストを作成できます。
関数は文字列を期待する必要があります。文字列に複数の文字がある場合は、最初と最後の文字を比較します。1 文字または 0 文字の場合、true を返します。2 つの文字が等しい場合は、最初と最後の文字なしで、文字列を使用して関数を再度呼び出します。等しくない場合は false を返します。
palindrom( word):
IF length of word 1 or 0 THEN
return 0;
IF last and first letter equal THEN
word := remove first and last letter of word;
palindrom( word);
ELSE
return false;
a=raw_input("enter the string:")
b=len(a)
c=0
for i in range(b):
if a[i]==a[-(i+1)]:
c=c+1
if c==b:
print a,"is polindrome"
else:
print a,"is not polindrome"
私の解決策
#To solve this I'm using the stride notation within a slice [::]
def amazonPalindrome(input):
inputB = input
input = input[::-1]
#print input
noPalindrome = inputB + " is not a palindrome"
isPalindrome = inputB + " is a palindrome"
#compare the value of the reversed string to input string
if input[0]!= input[-1]:
print noPalindrome
else:
print isPalindrome
#invoking the def requires at least 1 value or else it fails
#tests include splitting the string,mixing integers, odd amount palindromes.
#call the def
amazonPalindrome('yayay')
n=raw_input("Enter a number===>")
n=str(n)
l=len(n)
s=""
for i in range(1,l+1):
s=s+n[l-i]
if s==n:
print "Given number is polindrom"
else:
print "Given number is not polindrom"
これが C バージョンです。C コードを検索してここにたどり着いた人がいるなら!
int IsPalindrome_Recursive(char *s, int start, int end)
{
if ((end - start) < 2)
{
return 1;
}
if (s[start] != s[end])
{
return 0;
}
return IsPalindrome_Recursive(s, ++start, --end);
}
次のように呼び出します。
IsPalindrome_Recursive(s, 0, strlen(s) - 1)