标签: palindrome

反向/回文的递归Prolog谓词

  1. 我是否可以获得具有两个参数的递归Prolog谓词,称为reverse,它返回列表的反转:

    示例查询和预期结果:

    ?- reverse([a,b,c], L).
    L = [c,b,a].
    
  2. 两个参数的递归Prolog谓词,palindrome如果给定列表是回文,则返回true.

    具有预期结果的示例查询:

    ?- palindrome([a,b,c]).
    false.
    
    ?- palindrome([b,a,c,a,b]).
    true.
    

reverse list prolog palindrome dcg

8
推荐指数
2
解决办法
5461
查看次数

如何有效地确定给定字符串中最长的单个字符回文?

给定一个长度为N的字符串[AZ],如何确定单个字符的最长回文?

我将用一个例子来说明这一点:

给定字符串:JOHNOLSON 在分析字符串时,我们发现我们有一个带有字符的回文O使得字符串看起来像.它的回文长度基本上看起来像7 .另外,请注意有一个回文,但它只有6个长度.JOHNOLSONOO--O--ON

另一个例子,给定字符串:ABCJOHNOLSON给出与上面相同的结果,其中O长度为7 的回文看起来像.O--O--O

但是,对于给定的字符串ABCJOHNOLSONDA,最长的单个字符回文长度为14,字符A看起来像.A------------A

其他简单的例子包括:

ABA- > (长度3)A-A

ABAXYZ- > (长度3)A-A

ABAXYZA- > (长度5),而不是长度7因为不是信件的回文.A---AA-A---AA

特别注意最后一个例子,因为它说明了问题的一个微妙的细微差别.

algorithm palindrome

8
推荐指数
1
解决办法
353
查看次数

7
推荐指数
2
解决办法
2万
查看次数

回文使用堆栈

我们的教授要求我们通过使用堆栈检查一个单词是否是回文.每次我运行它都会出错:Unhandled Exception. Access violation我做错了什么?我该如何改进我的代码?我的代码如下:

 typedef struct stack{
    char name;
    struct stack * next;
}Stack;

void push(Stack**head, char value);
char pop(Stack**head);


int main(){
   char word[11];
   int i=0;
   int lenght = 0; 
   Stack*head = NULL;
   printf("Please type the word: ");
   scanf("%s", word);
   lenght = strlen(word);
   while(word[i]!='\0'){
       push(&head, word[i]);
       i++;
   }
   i = 0;
   while(pop(&head)==word[i]){
       i++;
   }
   if(i==lenght) printf("The word is a palindrome");
   else printf("The word is not a palindrome");
}
Run Code Online (Sandbox Code Playgroud)

c stack palindrome data-structures

7
推荐指数
1
解决办法
9732
查看次数

最高回文,python中有3位数字

http://projecteuler.net/的问题4中,它说:

回文数字两种方式相同.由两个2位数字的乘积制成的最大回文是9009 = 91*99.

找到由两个3位数字的乘积制成的最大回文.

我这里有这个代码

def isPalindrome(num):
    return str(num) == str(num)[::-1]
def largest(bot, top):
    for x in range(top, bot, -1):
        for y in range(top,bot, -1):
            if isPalindrome(x*y):
                return x*y
print largest(100,999)
Run Code Online (Sandbox Code Playgroud)

它应该找到最大的回文,它吐出580085我认为是正确的,但项目欧拉不这么认为,我在这里有什么不对吗?


当我尊敬for循环时,我没有想到它,我删除了检查最大,愚蠢的我的东西.继承人的工作代码

def isPalindrome(num):
    return str(num) == str(num)[::-1]
def largest(bot, top):
    z = 0
    for x in range(top, bot, -1):
        for y in range(top,bot, -1):
            if isPalindrome(x*y):
                if x*y > z:
                    z = x*y
    return z
print largest(100,999)
Run Code Online (Sandbox Code Playgroud)

吐出906609

python math logic palindrome

7
推荐指数
2
解决办法
2万
查看次数

添加最少量的字符以构成回文

问题:

给定任何字符串,添加尽可能少的字符,使其成为线性时间的回文.

我只能想出一个O(N 2)解决方案.

有人可以用O(N)解决方案帮助我吗?

algorithm palindrome

7
推荐指数
1
解决办法
1万
查看次数

如何检测希伯来语中的回文?

我正在为回文求解器编写一系列测试.我在希伯来语中遇到了有趣的回文:

טעםלפתתפלמעט

这是一个回文,但字母Mem有一个常规形式(מ)和一个"最终形式"(ם),它如何显示为单词中的最后一个字母.但是在我的程序中没有硬编码"0x5de => 0x5dd",我无法找到一种方法来以编程方式依赖Unicode,Python或将两者视为相同的库.我尝试过的事情:

s = '??? ??? ??? ???'
s.casefold() # Python 3.4
s.lower()
s.upper()
import unicodedata
unicodedata.normalize(...) # In case this functioned like a German Eszett
Run Code Online (Sandbox Code Playgroud)

所有人都产生了相同的字符串.其他会导致这个问题的希伯来字母(如果有人稍后搜索)将是Kaf,Nun,Peh和Tsadeh.不,我不是希伯来语的母语.

python unicode internationalization palindrome hebrew

7
推荐指数
1
解决办法
337
查看次数

无法理解寻找最长回文子串的解决方案之一

参考这篇关于 leetcode 的文章,解决最长回文子串问题有一个常见的错误:

反转 S 变成 S'。找出 S 和 S' 之间的最长公共子串,它也必须是最长的回文子串。

例如:

S = “abacdfgdcaba”,S' = “abacdgfdcaba”。

S 和 S' 之间最长的公共子串是“abacd”。显然,这不是一个有效的回文。

但是下面的整改我不太明白。任何人都可以用分步程序/示例来解释它吗?谢谢!

为了纠正这个问题,每次我们找到最长公共子串候选时,我们检查子串的索引是否与反向子串的原始索引相同。

algorithm palindrome

7
推荐指数
2
解决办法
1166
查看次数

检查字符串的排列是否可以成为回文

编写一个方法来测试字符串是否满足成为回文的前提条件.

例如:

Input    | Output
mmo      | True  
yakak    | True  
travel   | False
Run Code Online (Sandbox Code Playgroud)

我在考虑这种方法:

  1. 为T的所有排列创建一个后缀树,使得T $ Reverse(T)#
  2. 检查同一节点的所有排列

我错过了什么吗?

string algorithm palindrome

7
推荐指数
3
解决办法
2万
查看次数

最快的算法来查找最大回文数,该回文数是两个具有相同位数的数字的乘积

如何使此代码在30秒钟内运行,以找到最大的回文数,该回文数是具有相同数字的2个数字的乘积?

def palindrome(maxInt):
    pa=[]
    for x in range(maxInt,0,-1):
        for y in range(maxInt,0,-1):
            num=x*y
            if str(num) == str(num)[::-1]:
                pa.append(num)
    return max(pa)
Run Code Online (Sandbox Code Playgroud)

maxInt是具有指定数字的最大数字。例如,如果您想要的回文数是2个3位数的倍数,则您maxInt将为999。如果您想要的最大回文数是2个4位数的倍数,maxInt则将为9999。

如果为maxInt = 9,则应输出9。

如果为maxInt = 99,则应输出9009。

因此,如果maxInt = 999,则程序应输出906609。

如何maxInt=9999在30秒内返回99000099

python palindrome

7
推荐指数
1
解决办法
214
查看次数