作者:雲痕影落_969 | 来源:互联网 | 2024-10-24 20:50
力扣696.计数二进制子串和467.独特子串的优美解法虽然被标记为简单题,但在实际解决过程中仍具有一定的挑战性。本文将对这两道题目进行详细的解析和补充说明,特别是8月19日的更新内容,帮助读者更好地理解其中的算法思路和实现方法。通过具体的代码示例和实例分析,我们将展示如何高效地解决这些问题,并探讨其背后的数学原理和优化技巧。
696.计数二进制子串
虽然说是简单题,但我想不出来,这题答案的解法真的很巧妙。
class Solution {
public:
int countBinarySubstrings(string s) {
vectorcounts(s.size(),0);
int count=1,ans=0;
for(int i=0;i if(s[i+1]!='\0'&&s[i]==s[i+1]){
count++;
}
if(s[i]!=s[i+1]||s[i+1]=='\0'){
counts.push_back(count);
count=1;
}
}
for(int i=0;i ans+=min(counts[i],counts[i+1]);
}
return ans;
}
};
467.环绕字符串中唯一的子字符串
这题我做不来,居然是动态规划,没想到。
class Solution {
public:
int findSubstringInWraproundString(string p) {
vectordp(26,0);
int k=1;
dp[p[0]-'a']=1;
for(int i=1;i
if((p[i]-p[i-1]+26)%26==1){
k++;
k代表p每个中字母连续的串的长度。
}
else k=1;
dp[p[i]-'a']=max(dp[p[i]-'a'],k);
如果有重复的连续字母的子串,取较长的那个。
}
return accumulate(dp.begin(),dp.end(),0);
}
};