[CareerCup][Google Interview] 打印组合
http://www.careercup.com/question?id=3315662
given a string find the number of distinct substrings of the string.
ex:
input-> aaaa
output-> 4(a, aa, aaa, aaaa)
input->abcd
output->10(a, b, c, d, ab, bc, cd, abc, bcd, abcd)
我的方法避免重复是设置一个used数组,记录每个数被使用的情况,如果当前的数和它前一个数相同,则前一个数必须被使用了,当前数才能被使用,这样就能避免了重复出现。
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 bool used[100]; 6 7 void solve(int dep, int maxDep, string &s, string ans, int start) 8 { 9 if (dep != 0) 10 cout << ans << endl; 11 12 if (dep == maxDep) 13 return; 14 15 for(int i = start; i < s.size(); i++) 16 { 17 if (i == 0) 18 { 19 used[i] = true; 20 solve(dep + 1, maxDep, s, ans + s[i], i + 1); 21 used[i] = false; 22 } 23 else 24 { 25 if (s[i] == s[i-1]) 26 { 27 if (used[i-1]) 28 { 29 used[i] = true; 30 solve(dep + 1, maxDep, s, ans + s[i], i + 1); 31 used[i] = false; 32 } 33 } 34 else 35 { 36 used[i] = true; 37 solve(dep + 1, maxDep, s, ans + s[i], i + 1); 38 used[i] = false; 39 } 40 } 41 } 42 } 43 44 int main() 45 { 46 string a = "aaaa"; 47 memset(used, false, sizeof(used)); 48 solve(0, a.size(), a, "", 0); 49 50 string b = "abcd"; 51 memset(used, false, sizeof(used)); 52 solve(0, a.size(), b, "", 0); 53 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】