我在解决这个问题-
编写一个反转字符串的函数。输入字符串作为字符的数组给出。
示例1:
输入:s= "h“、"e”、"l“、"l”、"o“输出:"o”、"l“、"l”、"e“、"h”示例2:
输入:s= "H“、"a”、"n“、"n”、"a“、"h”输出:"h“、"a”、"n“、"n”、"a“、"H”
我编写了这个解决方案,它提供了一个运行时错误:添加无符号偏移量。
class Solution {
public:
void funToReverse(int left,int right,vector<char> &s){
if(left==right)
return;
else{
char temp = s[left];
s[left]=s[right];
s[right]=temp;
funToReverse(left+1,right-1,s);
}
}
void reverseString(vector<char>& s) {
int left =0;
int right = s.size()-1;
funToReverse(left,right,s);
}
};错误:
运行时错误: 0x6020000001b0溢出到0x6020000001af (stl_vector.h)汇总: UndefinedBehaviorSanitizer:未定义-行为stl_vector.h
发布于 2021-07-16 02:21:16
问题是,left和right之间有可能相互传递而不具有相同的值。解决这一问题的一个方法是:
class Solution {
public:
void funToReverse(int left,int right,vector<char> &s){
if(left>=right) // Check if left has reached right
return;
else{
char temp = s[left];
s[left]=s[right];
s[right]=temp;
funToReverse(left+1,right-1,s);
}
}
void reverseString(vector<char>& s) {
int left =0;
int right = s.size()-1;
funToReverse(left,right,s);
}
};如果有奇数的元素,则(左,右)如下:(0,4),(1,3),(2,2)
但是,如果有偶数的元素,则左将向右传递但绝不相同:(0,5),(1,4),(2,3),(3,2),(4,1),(5,0),(6,-1)
请注意,在这个实例中,left一直到6,而right使其变为-1,这是无效的。
https://stackoverflow.com/questions/68402660
复制相似问题