我想按以下顺序打印子字符串: “”,“ d”,“ c”,“ cd”,“ b”,“ bd”,“ bc”,“ bcd”,“ a”,“ ad”,“ ac”,“ acd”,“ ab” ,“ abd”,“ abc”,“ abcd”
我编写了一个代码,该代码将获取字符串的第一个字符,然后从enxt字符获取随后的子字符串,然后对其进行调用。 该过程将一直进行到字符串为空为止。然后,我开始将字符串和字符连接起来以形成系列。 我编写了以下代码,但对于最后几种编排没有给出正确的结果。 我在这里做错了什么?
import java.util.Scanner;
public class PrintSubstringsWithVoid {
public static void main(String[] args) {
Scanner scn =new Scanner(System.in);
String str=scn.nextLine();
printSub(str,'\0');
}
public static void printSub(String str,char ch1){
if (str.length()==0){
StringBuilder sb=new StringBuilder();
sb.append(ch1);
System.out.println(sb.toString()+"");
return;
}
char ch=str.charAt(0);
String st=str.substring(1);
printSub(st,ch1);
StringBuilder sb1=new StringBuilder();
if (st.length()<=1){
sb1.append(ch);
StringBuilder sb2=new StringBuilder();
sb2.append(ch1);
String stt=sb2.toString()+sb1.toString();
System.out.println(stt);
String st1=sb2.toString()+sb1.toString()+st;
if (st.length()!=0) {
System.out.println(st1);
}
}else{
printSub(st,ch);
}
}
}
这些是我的结果: d C 光盘 b d 公元前 光盘 一种 广告 交流电 光盘 b d 公元前 bcd
最后4个编队'a'都在这里丢失
答案 0 :(得分:1)
该解决方案很简单,就像您有一个字符串“ abcd”一样。因此,如果您知道“ bcd”的答案,那么通过将“ a”与所有“ bcd”的结果相加,“ abcd”的答案将是“ bcd”的答案加上字符串。
例如,
“ bcd”的结果是:d, c, cd, b, bd, bc, bcd,
因此,“ abcd”的结果将是:d, c, cd, b, bd, bc, bcd, a, a+(d, c, cd, b, bd, bc, bcd)
所以解决方案是:
import java.util.ArrayList;
import java.util.Scanner;
public class PrintSubstrings {
public static void main(String[] args) {
Scanner scn =new Scanner(System.in);
String str=scn.nextLine();
ArrayList<String>ans=printSub(str);
for(int i=0;i<ans.size();i++)
{
System.out.print(ans.get(i)+" ");
}
}
public static ArrayList<String> printSub(String str) {
if(str.length()==0)return new ArrayList<String>();
ArrayList<String> fx=printSub(str.substring(1));
int size=fx.size();
fx.add(Character.toString(str.charAt(0)));
for(int i=0;i<size;i++)
{
fx.add(str.charAt(0)+fx.get(i));
}
return fx;
}
}
使用void函数:
import java.util.ArrayList;
import java.util.Scanner;
public class aa {
public static void main(String[] args) {
Scanner scn =new Scanner(System.in);
String str=scn.nextLine();
printSub(str,"");
}
public static void printSub(String str,String pre) {
if(str.length()==0){
System.out.println(pre);
return;
}
printSub(str.substring(1),pre);
printSub(str.substring(1),pre+Character.toString(str.charAt(0)));
}
}