LeetCode最长公共前缀问题:vector<string>元素修改异常求助
LeetCode最长公共前缀代码调试问题
算法思路
我用C++解决LeetCode的最长公共前缀问题,思路是:循环逐一比较vector中相邻的字符串,若字符串不相等则截断所有字符串的最后一个字符;当所有字符串均相等时,返回该字符串作为公共前缀。
运行异常
以输入vector["flower","flow","flight"]为例,程序陷入无限循环,且字符串截断到"flow"后便无法继续截断。
调试中的诡异现象
执行vct[i] = vct[i].substr(0,z)语句后,打印vct[i].substr(0,z)能得到预期的截断后值,但vct[i]并未被修改;若直接使用固定值如vct[i] = vct[i].substr(0,1)则可正常修改,使用变量z时就失效。
我尝试将LeetCode传入的vector复制到自定义变量中,结果依旧;即使在代码开头修改vector内的字符串,后续通过循环变量修改也会失效,且编译器无报错。
我的代码
class Solution { public: string longestCommonPrefix(vector<string>& vct) { int z = vct[0].size() -1 ; int len = vct.size(); int count = 0; salto: for (int i=0 ; i<len && z > 0 ; i++) cout << vct[i]<< " " << z<< endl; for (int i=0 ; i<len-1 ; i++){ if (vct[i] != vct[i+1]) for (int i=0 ; i<len ; i++) { vct[i] = vct[i].substr(0,z); } z-=1; goto salto; } } };
部分运行输出
flower flow flight flower flow flight flowe flow fligh flow flow flig flow flow flig flow flow flig
内容的提问来源于stack exchange,提问作者Manuel Varagona
相关产品推荐
相关产品推荐

