http://www.lai18.com/content/1587564.html
1、刚开始,输入abcd,我们从后往前遍历,
abcd->abc->ab->a,一次递归完成
2、将原字符串的第一个字符截下,用后面的字符组成一个新的字符串,开始新的遍历,即bcd,开始新的遍历,
bcd->bc->b
3、继续下去,cd->c
4、最后是d
给定一个字符串,输出其所有的连续子串,如给定字符串为abcd,则要输出其全部连续子串为:a,b,c,d,ab,bc,cd,abc,bcd,abcd
1、刚开始,输入abcd,我们从后往前遍历,
abcd->abc->ab->a,一次递归完成
2、将原字符串的第一个字符截下,用后面的字符组成一个新的字符串,开始新的遍历,即bcd,开始新的遍历,
bcd->bc->b
3、继续下去,cd->c
4、最后是d
public void successiveString(String str) {
for (int i = str.length(); i >= 0; i--) // need optimization
System.out.println(str.substring(0, i));
if (str.length() > 1)
successiveString(str.substring(1));
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
new SuccessiveString().successiveString(str);
}
http://www.itmian4.com/thread-4340-1-1.html- public static void main(String[] args) {
- Scanner ss=new Scanner(System.in);
- String s=ss.nextLine();
- char[] c=s.toCharArray();
- for(int i=0;i<c.length;i++)
- {
- System.out.print(c[i]+" ");
- StringBuffer temp=new StringBuffer();
- temp.append(c[i]);
- for(int j=i+1;j<c.length;j++)
- {
- temp.append(c[j]);
- System.out.print(temp.toString()+" ");
- }
- }
void AllSubstring3(const char *str,char *arr)
{
//穿入的arr的长度为len+1,最后一个位置保存'\0'
int i,j;
unsigned int len = strlen(str);
strcpy(arr,str);
for(i=len-1;i>=0;i--)
{
arr[i+1] = '\0';
for(j=i;j>=0;j--)
printf("%s\t",&arr[j]);
printf("\n");
}
}
不考虑输出字符串重复的问题吗? 比如输入“aab" 应该输出a,b,aab,aa,ab