没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
1页
输出字符串的子串。 狼牙灬月 [原]《程序员面试题精选》05.输出一个字符串的所有子串 题目:给定一个字符串,输出其所有子字符串,例如给定字符串abc,则输出 :a,b,c,d,ab,bc,cd,abc,bcd,abcd。 分析:今天看到csdn博客上面的一题,说是阿里巴巴电面的题目。初看到这道题的时候,就感觉很熟悉,在高中的时候,经常要算这种组合有多少个,当时我们计算的方法顺序是这样的:3+2+1 即 a,b,c,d, ab,bc,cd, abc,bcd, abcd。 假如我们按照这种思路去写程序的话,你会发现很难写,因为当我们输出两个字符的子串时,他们在abcd中可能是不连续的,记住程序在处理连续问题要简单些,所以我们就要变化个思路,将其转为连续。也就是以如下顺序输出的。 "a","ab","abc","abcd", "b","bc","bcd", "c","cd", "d" 看到这种形式很容易让我们想到递归的方法,第一次以a开头,第二次以b开头。。。确定开头后之后的操作是一样的。 有递归法就一般可以转为非递归。
资源推荐
资源详情
资源评论
题目:给定一个字符串,输出其所有子字符串,例如给定字符串 abc,则输出:a,b,c,d,ab
,bc,cd,abc,bcd,abcd。
分析:今天看到 csdn 博客上面的一题,说是阿里巴巴电面的题目。初看到这道题的时候,就感觉
很熟悉,在高中的时候,经常要算这种组合有多少个,当时我们计算的方法顺序是这样的:
3+2+1 即
a,b,c,d,
ab,bc,cd,
abc,bcd,
abcd。
假如我们按照这种思路去写程序的话,你会发现很难写,因为当我们输出两个字符的子串时,他
们在 abcd 中可能是不连续的,记住程序在处理连续问题要简单些,所以我们就要变化个思路,将
其转为连续。也就是以如下顺序输出的。
"a","ab","abc","abcd",
"b","bc","bcd",
"c","cd",
"d"
看到这种形式很容易让我们想到递归的方法,第一次以 a 开头,第二次以 b 开头。。。确定开头
后之后的操作是一样的。
有递归法就一般可以转为非递归。
解法一:递归法
void findAllSubstrings(const char *s){ int x=0; while(*(s+x)){ for(int y=0; y<=x; y++) cout<<*(s+y);
cout<<''; x++; } if(*(s+1)) findAllSubstrings(s+1); else return;}
解法二:非递归
void findAllSubstrings(String str,int length){ for(int i = 0 ; i < length ; i++ ){ for(int j = 1 ; j <= length - i ; j++ ){ sub =
str.substring(i, i+j); System.out.println(sub); } }}
作者:SpeedMe 发表于 2014-3-31 12:48:37 原文链接
阅读:143 评论:0 查看评论
资源评论
CodingLife99
- 粉丝: 1108
- 资源: 454
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功