运行C++代码触发Segmentation Fault (SIGSEGV)错误,求排查解决
问题排查与修复
核心错误原因
无限递归触发栈溢出
在solve函数的递归调用中,你传入的起始索引是i而非j+1:solve(v,ans,str,i); // 错误:始终从i开始,无法推进到字符串末尾这会导致递归永远无法终止,函数调用栈持续膨胀,最终触发
Segmentation Fault (SIGSEGV)。类名大小写不匹配
main函数中实例化类时,将Solution写成了小写的solution:solution ob; // 错误:类名是Solution,C++对大小写敏感这会导致编译错误,若未修正会间接引发运行时异常。
修复后的完整代码
#include<bits/stdc++.h> using namespace std; class Solution{ public: // 优化:传const引用避免字符串拷贝 bool isPalindrome(const string& str,int start,int end){ while(start<end){ if(str[start]!=str[end]) return false; start++; end--; } return true; } void solve(vector<string>& v,int &ans,const string& str, int i){ if(i==str.length()){ if(v.size()<ans) ans=v.size(); return; } for(int j=i;j<str.length();j++){ if(isPalindrome(str,i,j)) { v.push_back(str.substr(i,j-i+1)); // 修正:递归起始索引改为j+1,推进处理进度 solve(v,ans,str,j+1); v.pop_back(); } } } int palindromicPartition(string str) { vector<string> v; int ans = INT_MAX; solve(v,ans,str,0); return ans-1; } }; int main(){ int t; cin>>t; while(t--){ string str; cin>>str; // 修正:类名改为正确的Solution Solution ob; cout<<ob.palindromicPartition(str)<<"\n"; } return 0; }
额外优化提示
递归解法的时间复杂度为指数级,对于较长字符串会出现超时问题。可以改用动态规划优化:先预计算所有子串是否为回文,再通过DP数组记录每个位置的最小分割次数,大幅提升效率。
内容的提问来源于stack exchange,提问作者Jaid Mulla
相关产品推荐
相关产品推荐

