zoukankan      html  css  js  c++  java
  • [原]《程序员面试题精选》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开头。。。确定开头后之后的操作是一样的。

    有递归法就一般可以转为非递归。


    解法一:递归法

    void findAllSubstrings(const char *s){
        int x=0;
        while(*(s+x)){
            for(int y=0; y<=x; y++)
                cout<<*(s+y);
            cout<<'\n';
            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 查看评论
  • 相关阅读:
    解题:POI 2009 TAB
    解题:POI 2015 Pieczęć
    解题:POI 2013 Taxis
    解题:POI 2015 Kinoman
    题目1012:畅通工程(并查集)
    并查集深入分析
    题目1186:打印日期(日期计算)
    C/C++如何整行读入字符串?
    四种方法解决最大连续子序列和问题
    题目1011:最大连续子序列
  • 原文地址:https://www.cnblogs.com/huanglei/p/3677707.html
Copyright © 2011-2022 走看看