【发布时间】:2021-06-08 19:21:20
【问题描述】:
我被要求检查给定的字符串在重新排列后是否可以是回文,如果它可以是回文则返回 true,如果不能是回文则返回 false。
我遇到运行时错误:运行测试时出现分段错误。
这是我的代码:
bool palindromeRearranging(char * inputString) {
int index;
int count, count1 = 0;
for(int i = 0, b = strlen(inputString); i < b -1 ; i++)
{ count = 0;
if(inputString[i] == '*')
{
continue;
}else
{
for(int j = i+1; j < b ;j++)
{
if(inputString[i] == inputString[j] )
{
inputString[j] = '*';
count++;
index = i;
}
}
inputString[index] = '*';
}
if(count %2 == 0 && count != 0)
{
count1++;
}
}
for(int i = 0, b = strlen(inputString); i < b; i++)
{
if(inputString[i] != '*')
{
count1++;
}
}
if(count1 > 1)
{
return false;
}else
{
return true;
}
}
这里inputString 是给定的字符串。如果它们都相同,我尝试用* 替换这两个字符。然后数数。单个字符。
10 个测试用例中有 5 个已通过。
例如"abbcabb"、"aabb"、"zyyzzzzz" 等测试用例已通过。
但我遇到运行时错误:"abcad"、"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbccccaaaaaaaaaaaaa" 等测试用例的分段错误。 "abca", "abdhuierf".
希望你能帮我解决这个问题。
顺便说一句,我正在 codesignal.com 上的街机部分/介绍下解决这个问题。 Q.18 回文重排。
【问题讨论】:
-
您是否使用调试器单步调试代码并找出发生分段错误的位置?
-
索引未初始化,可能是随机的。
-
正如@VladfromMoscow 所说,你写的没有任何意义。 1) '*' 可以是字符串的一部分; 2)你是随机主演的; 3) 只需确保所有字符出现偶数次,最多 1 个字符出现奇数次。
-
@CostantinoGrana ...因为它在我的回答中实现了。:)
-
@VladfromMoscow 没错!
标签: c c-strings palindrome function-definition