九度 1369 字符串的排列

package com.wangzhu.njupt;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StreamTokenizer;
import java.util.Arrays;

/**
 * 还有重复的字符数组的全排列
 *
 * @ClassName: Main1369
 * @Description: TODO
 * @author 王竹
 * @date 2014-10-5 下午3:04:55
 *
 */
public class Main1369 {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        //System.setIn(new FileInputStream("data.in"));
        StreamTokenizer in = new StreamTokenizer(new BufferedInputStream(
                System.in));
        while (in.nextToken() != StreamTokenizer.TT_EOF) {
            String str = in.sval;
            char[] buf = str.toCharArray();
            Arrays.sort(buf);
            int len = buf.length;
            boolean[] flagArr = new boolean[len];
            Arrays.fill(flagArr, true);
            char[] res = new char[len];
            dfs(0, len, buf, res, flagArr);
        }
    }

    /**
     * 输入:<br/>
     * abc<br/>
     * BCA<br/>
     * 输出:<br/>
     * abc<br/>
     * acb<br/>
     * bac<br/>
     * bca<br/>
     * cab<br/>
     * cba<br/>
     * ABC<br/>
     * ACB<br/>
     * BAC<br/>
     * BCA<br/>
     * CAB<br/>
     * CBA<br/>
     */
    /**
     *
     * @param dep
     * @param maxDep
     * @param buf
     * @param res
     * @param flagArr
     */
    private static void dfs(int dep, int maxDep, char[] buf, char[] res,
            boolean[] flagArr) {
        if (dep == maxDep) {
            System.out.println(new String(res));
            return;
        }
        for (int i = 0; i < maxDep; i++) {
            if (!flagArr[i]
                    && (i != 0 && buf[i] == buf[i - 1] && flagArr[i - 1])) {
                // 当有重复的时候
                continue;
            }
            flagArr[i] = false;
            res[dep] = buf[i];
            dfs(dep + 1, maxDep, buf, res, flagArr);
            flagArr[i] = true;
        }
    }
}
时间: 2024-10-19 22:41:53

九度 1369 字符串的排列的相关文章

九度 1101 - 字符串处理 - 计算表达式

根据我的通过来看,首先这道题里面没有小数,如果存在除不尽的情况,也是按取整来算. 本题建立了两个栈,一个存储数字的数字栈,一个存储加减乘除的符号栈.在处理字符串的时候,每次找到一个数字时,放进一个string的临时变量里,因为会存在十位以上的情况:每次找到一个符号时,首先将string变量转int放入数字栈,然后检查符号栈的栈顶符号是否为乘或者除,如果是就从符号栈弹出顶,从数字栈弹出两个数,计算后放回数字栈.这样到处理完字符串时,我们的符号栈内只剩下加和减了.此时不断弹出符号与数字进行计算,直至

九度1535 重叠的最长字串 字符串哈希

题目描述: 给定两个字符串,求它们前后重叠的最长子串的长度,比如"abcde"和"cdefg"是"cde",长度为3. 输入: 输入可能包含多个测试案例. 对于每个测试案例只有一行, 包含两个字符串.字符串长度不超过1000000,仅包含字符'a'-'z'. 输出: 对应每个测试案例,输出它们前后重叠的最长子串的长度. 样例输入: abcde cdefg 样例输出: 3 #include <iostream> #include <

剑指OFFER之把数组排成最小的数(九度OJ1504)

题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数.输入的第二行包括m个正整数,其中每个正整数不超过10000000. 输出: 对应每个测试案例,输出m个数字能排成的最小数字. 样例输入: 3 23 13 6 2 23456 56 样

【剑指offer】字符串的排列

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26390551 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个测试案例包括1行. 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 输出: 对应每组数据,按字典序输出所有排列. 样例输入: abc BCA 样例输出:

九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题

题目1165:字符串匹配 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2497 解决:858 题目描述: 读入数据string[ ],然后读入一个短字符串.要求查找string[ ]中和短字符串的所有匹配,输出行号.匹配字符串.匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配.如"aa[123]bb",就是说aa1bb.aa2bb.aa3bb都算匹配. 输入: 输入有多组数据. 每组数据第一行输入n(1<=n<=1000),从第二行开始输入n个字符串(

九度OJ--Q1165

九度OJ--Q1165 import java.util.ArrayList;import java.util.Scanner; /* * 题目描述: * 读入数据string[ ],然后读入一个短字符串.要求查找string[ ]中和短字符串的所有匹配,输出行号.匹配字符串. * 匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配.如“aa[123]bb”,就是说aa1bb.aa2bb.aa3bb都算匹配. * 输入: * 输入有多组数据. * 每组数据第一行输入n(1<=n<=100

九度OJ&amp;北邮机试题题解(北邮2010网院)

题目一.九度OJ-1173:查找(水题随便搞) ac.jobdu.com/problem.php?pid=1173 题目描述: 输入数组长度 n 输入数组      a[1...n] 输入查找个数m 输入查找数字b[1...m] 输出 YES or NO  查找有则YES 否则NO . 输入: 输入有多组数据. 每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100). 输出: 如果在n个数组中输出YES否则输出NO. 样例输入: 5 1 5 2 4 3 3

九度OJ&amp;北邮机试题(2011网院)

题目一.九度OJ-1177:查找 http://ac.jobdu.com/problem.php?pid=1177 题目描述: 读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1.翻转  从下标为i的字符开始到i+len-1之间的字符串倒序:2.替换  命中如果第一位为1,用命令的第四位开始到最后的字符串替换原读入的字符串下标 i 到 i+len-1的字符串.每次执行一条命令后新的字符串代替旧的字符串(即下一条命令在作用在得到的新字符串上). 命令格式:第一

剑指offer系列源码-字符串的排列

题目1369:字符串的排列 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2432解决:609 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个测试案例包括1行. 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 输出: 对应每组数据,按字典序输出所有排列. 样例输入: abc BCA 样例输出: abc acb ba