使用for循环来重新排序模式中字符串的字符

时间:2016-10-22 01:20:53

标签: java

(我不知道该怎么称呼它,如果它模糊或不准确,请道歉。我环顾'网络寻找答案,但我不知道该搜索什么问题,因此,我来​​了此处。)

我需要一个方法来获取字符串并从中获取字符并将其放入模式中。

所以,让我们说String s = "abcd".这个方法需要采用它并打印"abcd," "bcd," "abc," "cd," "bc," "ab," "d," "c," "b," "a".我完全不知道如何使这个工作,所以任何事情都会有用。

以下是一种类似于我想要实现的方法。

void printSub3(String s){
    for(int i = 0; i < s.length(); i++){
        for(int j = 0; j < s.length()-i; j++){
            System.out.printf(s.substring(s.length()-j-i-1, s.length()-j)+", ");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以通过从1到2 n -1(包括1和2)计数来构建所有子集的列表,并使用数字作为位模式来决定要采用的字符串的哪些元素(1 )和哪些要跳过(零):

String str = "abcd";
for (int mask = 1 ; mask != 1<<str.length() ; mask++) {
    StringBuilder bld = new StringBuilder();
    for (int i = 0 ; i != str.length() ; i++) {
        if ((mask & 1<<i) != 0) {
            bld.append(str.charAt(i));
        }
    }
    System.out.println(bld);
}

答案 1 :(得分:0)

我建议您自己尝试使用提示:

使用n位作为每个字符在结果字符串中可能存在的标志,其中n是输入字符串中的char数。切换标志以覆盖范围[0-(2 ^ n-1)]中的所有值,并生成与这些位模式对应的字符串。

学习按位移位操作和位模式/屏蔽的好问题。所以尝试自己编码。