我们的教授要求我们通过使用堆栈检查一个单词是否是回文.每次我运行它都会出错: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) 参考这篇关于 leetcode 的文章,解决最长回文子串问题有一个常见的错误:
反转 S 变成 S'。找出 S 和 S' 之间的最长公共子串,它也必须是最长的回文子串。
例如:
S = “abacdfgdcaba”,S' = “abacdgfdcaba”。
S 和 S' 之间最长的公共子串是“abacd”。显然,这不是一个有效的回文。
但是下面的整改我不太明白。任何人都可以用分步程序/示例来解释它吗?谢谢!
为了纠正这个问题,每次我们找到最长公共子串候选时,我们检查子串的索引是否与反向子串的原始索引相同。
在c ++中,找到给定15位数的下一个回文的最快逻辑是什么?例如下一个回文:134567329807541?
在阅读了polygenelubricants关于高级正则表达式技术的系列文章后(特别是这个Java正则表达式如何检测回文?),我决定尝试创建自己的PCRE正则表达式来解析回文,使用递归(在PHP中).
我想出的是:
^(([a-z])(?1)\2|[a-z]?)$
Run Code Online (Sandbox Code Playgroud)
我对这个表达式的理解是它应该匹配零个或一个字符(每个小于2个字符的字符串隐含一个回文,以及在递归中考虑奇数长度的回文),或者两个相同的字符分开通过模式的递归.
不幸的是,它似乎没有那样工作,你可以在www.ideone.com/a9T3F上看到.取而代之的是,只有2的弦ñ - 1(.即空字符串,a
,aaa
,aaaaaaa
,一15)重复字符匹配正则表达式.
奇怪的是,如果我改变我的模式,这样的递归是可选的(即^(([a-z])(?1)?\2|[a-z]?)$
,见www.ideone.com/D6lJR,它只匹配反复2字符串ñ倍(即空字符串,a
,aa
,aaaa
,aaaaaaaa
,一16) .
为什么我的正则表达式没有像我期望的那样工作?
注意那些渴望建议不使用正则表达式的人:
这个问题的关键是学习如何正确使用递归正则表达式.我知道这不是确定字符串是否是回文的有效方法,如果由于某种原因必须确定生产代码中的回文,我就不会使用递归正则表达式; 我只是想了解有关正则表达式高级方面的更多信息.
我刚刚开始使用python,我正在尝试测试用户输入的字符串作为回文.我的代码是:
x=input('Please insert a word')
y=reversed(x)
if x==y:
print('Is a palindrome')
else:
print('Is not a palindrome')
Run Code Online (Sandbox Code Playgroud)
这总是返回false,因为y变成了类似于<reversed object at 0x00E16EF0>
反转字符串的东西.我什么都不知道?你会如何编码这个问题?
假设我有一个字符流作为我的输入.
添加每个新字符后,如何
在不重新处理整个字符串的情况下找到最长的回文子字符串的最佳方法是什么?
在每个新角色进入后,我想避免重复
先前处理过的字符串.
是否有我可以使用的树数据结构:
1.我不会从头开始重建每个新角色.
2.当字符串逐渐变长时,我可以移动节点和叶子.
如何构建2个树,一个用于字符串(前缀树),
另一个用于字符串的反转(后缀树)?
我正在研究一些介绍性的递归问题,我有一个澄清的问题,我想得到答案.我遇到的最棘手的问题是这个递归是如何在下面解决的问题中运行的?
尽管已经解决了这个问题,但我只是不理解递归调用如何进入字符串的内部.从查看代码看,这个方法似乎只检查给定字符串两端的两个字符,而不检查其余字符.我的教科书给出了非常不满意的答案,基本上,只要你的return语句改进了问题,就不要担心递归是如何工作的.但是我很难知道如何处理后续的递归问题而不了解如何跟踪递归方法的方式与跟踪循环的方式相同.
任何智慧的话都会受到赞赏.
谢谢!
public class isPalindrome {
public static boolean isPalindrome(String str)
{
//test for end of recursion
if(str.length() < 2) {return true;}
//check first and last character for equality
if(str.charAt(0) != str.charAt(str.length() - 1)){return false;}
//recursion call
return isPalindrome(str.substring(1, str.length() - 1));
}
public static void main(String[] args)
{
System.out.print(isPalindrome("deed"));
}
}
Run Code Online (Sandbox Code Playgroud) 我想弄清楚这段代码是如何工作的.如何i
在for循环之外访问?
# Palindrome of string
str=raw_input("Enter the string\n")
ln=len(str)
for i in range(ln/2) :
if(str[ln-i-1]!=str[i]):
break
if(i==(ln/2)-1): ## How is i accessible outside the for loop ?
print "Palindrome"
else:
print "Not Palindrome"
Run Code Online (Sandbox Code Playgroud) 我写了两个函数来检查一个数字(整数)是否是回文。
第一个函数在不影响数据类型的情况下反转数字,而第二个函数将数字转换为字符串,反转字符串,然后将其转换回整数以比较给定的数字。
def is_palindrome(n):
"""
This function checks if a number is a Palindrome
or not.
"""
result = 0
temp = n
while temp > 0:
result *= 10
result += temp % 10
temp //= 10
return result == n
Run Code Online (Sandbox Code Playgroud)
def is_palindrome_str(n):
"""
This function checks if a number is a Palindrome
or not.
"""
return int(str(n)[::-1]) == n
Run Code Online (Sandbox Code Playgroud)
通过比较执行时间,我发现第一种方法比第二种方法花费的时间更长。
我不明白为什么发生转换的第二种方法比通过打破每个数字并将它们重新加入临时变量来反转数字的方法快。
它们可以进一步优化吗,或者有没有更好的方法来检查一个数字是否是回文?
(由于我是初学者,我不明白转换方法在幕后是如何工作的,因此非常感谢额外的帮助。)
问题:
给定 ascii[az] 范围内的小写字母字符串,确定要删除的字符索引,以将该字符串更改为回文。如果字符串无法转换为回文或已经是回文,则返回 -1,否则返回要删除的字符的索引。
我的解决方案:
public static int palindromeIndex(String s) {
if(p(s)){
return -1;
}
StringBuilder sb = new StringBuilder(s);
for(int i=0; i<s.length(); i++){
sb.deleteCharAt(i);
if(p(sb.toString())){
return i;
}
sb.insert(i,s.charAt(i));
}
return -1;
}
private static boolean p(String s){
for(int i=0; i<s.length()/2; i++){
if(s.charAt(i) != s.charAt(s.length() - i - 1)){
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
根据 hackerrank,以下一个或所有测试用例均失败(无法确定是哪一个):
我的输出: