`
x0070704
  • 浏览: 2592 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

输出该字符串中字符的所有组合

阅读更多

输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc
   这题目估计大家都不陌生了,网上很多都一个递归方法解决,现在介绍一种非主流解决方法,来,让我们看代码:
  

 
    /**
     * @param args
     */
    public static void main(String[] args) {
        String temp = "abcdefghijklnmopqrstu";
        String[] results = getResult(temp);
    }

    private static String[] getResult(String str){
        int start = 1;
        int strSize = str.length();
      
        double max = Math.pow(2, strSize-1);
        double total = Math.pow(2, strSize)-1;
        String[] result = new String[(int)total];
        int step;
        int index;
        StringBuilder sb;
        while (start <= total) {
            sb = new StringBuilder();
            step = 1;
            index = 0;
            while (step <= max) {
                int temp = step & start;
                if (temp != 0) {
                    sb.append(str.charAt(index));
                }
                step <<= 1;
                index++;
            }
            result[start -1] = sb.toString();
            start++;
        }
        return result;
    }

     上面的总体思路是酱紫的:n个字符的所有组合个数就是2^n  -1 个。既然我们可以知道总数,那么不妨把这些数字换成二进制码,就有2^n  -1组二进制码,细心观察这些0101的二进制码,我们就会发现里面隐藏着一个规律,那就假如我们把那组二进制跟我们的字符串联想在一起,然后把出现1的 位置的字符连起来,不就是对应其中一种组合情况吗?换种说法,那2^n  -1个数所对应的二进制码,就是我们要的组合啊。那么接下来我们只需要把里面1的索引位置找出来,把字符串里面对应索引的字符取出来拼在一起就行了~~当然我觉得这里还有优化的余地,例如如何更快地找出1所在的位置之类~~
     还有,假如目标字符串是26个字母,这种算法列出组合,比网上的那些递归方法快差不多一倍(前提条件是不记录结果,或者直接输出结果,因为记录所有结果需要大量内存,不加内存会爆的........)~~~

0
0
分享到:
评论

相关推荐

    输入一个字符串,输出所有该字符串的组合情况

    标题 "输入一个字符串,输出所有该字符串的组合情况" 涉及的主要知识点是字符串处理和算法,特别是组合和排列的生成。在这个问题中,我们需要编写程序来生成一个给定字符串的所有可能的子序列或子字符串,这通常涉及...

    C++扩展String类,可输出彩色字符串

    这些函数可能接受颜色代码(如ANSI转义码),然后在输出字符串时插入这些代码以改变文本颜色。 3. **使用ANSI转义码**:在控制台上输出彩色字符串,通常使用的是ANSI转义码。这些是特殊的ASCII字符序列,可以告诉...

    labview字符串拆分到数组 支持中文1

    学习这些函数的组合使用,能提高在LabVIEW中处理字符串的效率和精度。 总结,LabVIEW中的“字符串拆分到数组”功能是通过“字符串到数组”函数实现的,它支持包括中文在内的各种字符。理解这个函数的工作原理和使用...

    输出一个字符串的所有排列

    字符串的所有排列是指将一个字符串中的字符按照不同的顺序重新组合,形成所有可能的字符串。这个问题通常用于考察程序员对递归的理解和实现能力。 首先,我们需要理解什么是递归。递归是一种解决问题的方法,它通过...

    TIA博途中字符串转换相关指令的使用方法(一).docx

    例如,在全局 DB 中创建四个变量,用来保存数据,然后在 OB1 中调用 STRG_VAL 指令,并连接参数,选择字符串的数据类型和浮点数的数据类型,将需要转换的字符串在输出参数 OUT 中作为浮点数输出。 * VAL_STRG 指令:...

    Python3倒序输出字符串的N种方法(含代码和介绍)

    在Python编程中,倒序输出字符串是一个常见的需求。本文将详细介绍几种实现字符串倒序的方法,并提供相应的代码示例。这些方法不仅能够帮助初学者快速掌握如何操作字符串,同时也为有经验的开发者提供了更多的选择。...

    字符串转ASCII ASCII转字符串

    相反,如果我们有一系列ASCII值,想要组合成一个字符串,可以逐个将这些值用`chr()`函数转换,然后连接起来。在Python中,可以使用列表推导式和`join()`函数来实现。 ```python # Python示例 ascii_values = [65, ...

    讨论字符串中字符出现的次数

    ### 字符串中字符出现次数的统计方法 在编程领域,特别是处理文本数据时,统计字符串中特定字符或子字符串的出现次数是一项常见的任务。本文将详细介绍几种实用的方法来完成这项工作,包括针对单个字符及子字符串的...

    C++字符串的全部排列

    字符串的排列是指从给定的字符集合中选取字符,并按照不同的顺序排列它们,生成所有可能的不同序列。在这个问题中,我们需要对给定的字符串中的每个字符进行全排列。 首先,我们来理解字符串的基本概念。在C++中,...

    Freemarker操作字符串

    在本文中,我们将深入探讨如何使用FreeMarker来操作字符串。 FreeMarker的工作原理是将模板(HTML或XML文件)与数据模型(通常是Java对象)相结合,生成最终的输出。模板中包含了可替换的占位符,这些占位符由...

    Java分割字符串

    例如,如果你想按照逗号和空格的组合来分割字符串,需要使用`\s*,\s*`,因为逗号和星号在正则表达式中有特殊含义: ```java String str = "Apple,Banana Orange"; String[] fruits = str.split("\\s*,\\s*"); for ...

    nodejs+字符串的模式匹配+正则表达式+判断获取字符串的某些需求

    在JavaScript中,正则表达式同样发挥着重要作用,尤其是在Node.js环境中进行字符串模式匹配时。本文将详细介绍如何在JavaScript中使用正则表达式进行字符串的模式匹配、提取以及替换。 #### 二、基本概念 正则...

    八进制数值字符串转ASCII码字符串C#实现

    在C#中,我们可以使用`Convert.ToInt32()`函数将八进制字符串转换为整数,然后通过`char.ConvertFromUtf32()`方法将该整数转换为对应的ASCII字符。如果输入的是一串八进制数值字符串,我们需要先将它们分割,逐个...

    字符串的操作,输入以字符串,然后排序

    题目要求我们编写一个程序,能够接收用户输入的字符串,然后对这个字符串中的字符进行排序,并输出排序后的结果。下面将详细讨论这个过程涉及到的知识点。 首先,我们需要了解字符串的基本概念。在大多数编程语言中...

    从控制台输入一串字符串,筛选整数输出。

    本文将详细介绍一个Java程序的设计思路与实现细节,该程序的功能是从控制台输入的一串字符串中筛选出所有的整数并输出。这个过程涉及到Java中的控制台输入处理、正则表达式匹配以及字符串操作等知识点。 #### 关键...

    字符串拼接工具

    它能够帮助开发者快速、有效地组合多个字符串,添加前缀或后缀,使得多行文本的格式化变得简单。 在编程中,字符串拼接通常是通过字符串连接运算符或者使用特定的函数来实现的。例如,在Python中,我们可以使用 "+...

    字符串面试题整理

    字符串是编程语言中常见且重要的数据结构之一,尤其在面试中常常被用来考察候选人的逻辑思维和算法理解能力。以下是一些与字符串相关的面试题目及其解题思路: 1. **字符串循环左移**:给定一个字符串和一个整数k,...

    c#字符串操作方法实例

    参数 len 的值必须不大于源字符串索引指定位置开始,之后的字符串字符总长度,否则会出现异常。 5. Replace() 方法 Replace() 方法用于字符串中特定字符串组合的替换,即将源字符串中的所有 oldValue 字符串替换为...

    字符串专题文档

    5. **格式化输出**:`printf()`或`format()`方法可以用来格式化输出字符串,如控制数字精度、插入变量等。 6. **字符串比较**:使用`equals()`或`compareTo()`方法进行字符串内容的比较,注意区分字面量和引用的比较...

    android字符串和16进制转换

    这个函数会将16进制字符串拆分成两字符一组,解析每组为16进制的整数,然后将这些整数转换为字节,最终组合成一个字符串。 **使用Java提供的工具类** 除了自定义方法外,Android也提供了`java.util.Formatter`和`...

Global site tag (gtag.js) - Google Analytics