在写leetcode每日一题的过程中遇到了一些无法解决的问题。
我进行了多次调试,虽然解决了问题,但是解决的莫名奇妙,也不知道为啥突然就能运行了。。。
题目描述:
给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。
如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称它们可以匹配:
字符串 words[i] 等于 words[j] 的反转字符串。
0 <= i < j < words.length
请你返回数组 words 中的 最大 匹配数目。
注意,每个字符串最多匹配一次。
示例 1:
输入:words = ["cd","ac","dc","ca","zz"]
输出:2
解释:在此示例中,我们可以通过以下方式匹配 2 对字符串:
int isPalindrome(char* str,char* str2){ int length = strlen(str); int len = strlen(str2); int i,j; for(i = 0,j = len - 1;i < length,j >= 0;i++,j--){ //printf("%c",str[i]); if(str[i] != str2[j]){ return 0;//不是回文串 } } return 1;//是回文串返回1}int maximumNumberOfStringPairs(char** words, int wordsSize){ int count = 0; for(int i = 0;i < wordsSize;i++){ for(int j = i + 1;j < wordsSize;j++){ if(isPalindrome(words[i],words[j]) == 1){ printf("words[i] = %s\n",words[i]); count++; } } } return count;}
运行出来的结果就没问题
words[i] = cd
words[i] = ac
num = 2
当我把isPalindrome函数中的for(i = 0,j = len - 1;i < length,j >= 0;i++,j--)写成i = 0,j = len - 1;i < length,j > 0;i++,j--)。
运行结果就变成了这样:
words[i] = cd
words[i] = cd
words[i] = ac
num = 3
这是为什么啊,明明在maximumNumberOfStringPairs函数中的for循环内对words[i]进行了遍历,只有words[0] = "cd"啊,怎么会出来两次,就弄不明白这里。
i < length, j >= 0
逗号运算符,表达式的值取决于最后一个子表达式的值,也就是j >= 0
注意,每个字符最多匹配一次
for(int i = 0;i < wordsSize;i++){ for(int j = i + 1;j < wordsSize;j++){ if(isPalindrome(words[i],words[j]) == 1){ printf("words[i] = %s\n",words[i]); count++; } } }
这个问题涉及到C语言中的字符串处理和数组索引。在你的代码中,isPalindrome
函数是用来检查两个字符串是否是回文串的。问题在于,你在修改了循环条件后,没有正确地初始化变量j
的值。
在你的代码中,isPalindrome
函数的循环条件被修改为i < length, j > 0
,这意味着j
的值在每次循环开始时没有被重新设置为字符串的末尾。因此,当i
增加时,j
的值保持不变,导致了对同一个字符串的多次比较。
为了解决这个问题,你需要在每次外部循环开始时将j
重新设置为字符串的末尾。你可以通过在每次外部循环开始时将j
初始化为wordsSize - 1
来实现这一点。下面是修改后的代码:
int isPalindrome(char* str, char* str2) { int length = strlen(str); int len = strlen(str2); int i, j; for (i = 0, j = len - 1; i < length && j >= 0; i++, j--) { if (str[i] != str2[j]) { return 0; // 不是回文串 } } return 1; // 是回文串返回1}int maximumNumberOfStringPairs(char** words, int wordsSize) { int count = 0; for (int i = 0; i < wordsSize; i++) { for (int j = i + 1; j < wordsSize; j++) { if (isPalindrome(words[i], words[j]) == 1) { printf("words[i] = %s\n", words[i]); count++; } } } return count;}
在上面的代码中,我在外部循环中添加了j = wordsSize - 1
,这样在每次外部循环开始时,j
都会被重新设置为字符串数组的最后一个元素的索引。这样就可以避免对同一个字符串进行多次比较的问题。
今天分享的是设计面试中关于工作经验的问题:工作中遇到最大的困难是什么?如何解决的?结果如何? 面试官的可能目的: 1.真假辨认:确认你实习经历的真实性,是真的实习还是美化包装的说辞,通常会从细节中泄露出来; 2.思维方式:你是如何定义“最大的困难”的,为什么会视这个问题为最大的困难(这会反映出你的眼界和思维方式); 3.能力模型:确认你从解决问题中积累了哪些经验,锻炼了哪些能力,是不是和JD相符;
任何人都可以帮助我解决这个问题AndroidManifest.xml mainactivity.kt
尝试了所有方法来通过测试用例,但仍然只显示一个错误。我不知道如何纠正这个错误。 输入:1534236469 实际输出:1056389759 预期输出:0 我不知道为什么我的代码没有给出输出0。
本文向大家介绍解决Pycharm 中遇到Unresolved reference 'sklearn'的问题,包括了解决Pycharm 中遇到Unresolved reference 'sklearn'的问题的使用技巧和注意事项,需要的朋友参考一下 解决方法: 在编程过程中,遇到很多错误,提示都是unresolved reference,在进行先关搜素后,从stackoverflow上的相关问题得到
要求:尽量充分的利用类型推导,而不用额外写一写奇奇怪怪的东西。 问题点: func(str) 有正常的类型推导,很完美; func(obj.bbb) 为什么不能像前者一样? 我知道可以下面两种办法: 类型断言(Type Assertion) 类型声明 我想知道有没有更好的办法?
我是Python的初学者,我正试图学习如何使用数据结构,如JSON对象,但我在试图从JSON对象中实际获取数据时遇到了困难。 我可以通过已经有的代码打印文件中的数据,但是我只想打印某个值,比如的值。我如何使用我已经有的代码打印这个?