有重复字符串全排列

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

import java.util.*;

public class Solution {
    public static ArrayList<String> Permutation(String str) {
        if(str == null)
            return null;
        ArrayList<String> list = new ArrayList<>();
        char[] chars = str.toCharArray();
        list = allSort(chars, 0, list);
        Collections.sort(list);
        return list;
    }

    public static ArrayList<String> allSort(char[] chars, int index, ArrayList<String> list){
        if(index == chars.length-1){
            list.add(String.valueOf(chars));
            return list;
        }
        for(int i=index; i< chars.length; i++){
            if(i != index && chars[i] == chars[index])//当要交换的值相同时
                continue;
            exChangeChars(index, i, chars); //修改第一个与后面的位置
            allSort(chars,index+1,list);
            exChangeChars(index, i, chars);//修改成原来的数组
        }

        return list;
    }
    /**
     * 交换两个字符数组的位置
     * @param index1
     * @param index2
     * @param chars
     */
    public static void exChangeChars(int index1, int index2, char[] chars){
        char tmp =chars[index1];
        chars[index1] = chars[index2];
        chars[index2] = tmp;
    }
}
时间: 2024-08-15 13:19:26

有重复字符串全排列的相关文章

Shell下支持变量的重复字符串

Python解决重复字符串是一个很轻松的事,比如说a="james",那么要获得"jamesjamesjames"就是"a*3". 但是这种"*"的字符串乘法在shell里是没有的,比如说"要输出10个a",还不想用for循环来做,怎么办? 首先都知道如果只是想输出1~10这十个数,是很简单的: #echo {1..10}就会得到:1 2 3 4 5 6 7 8 9 10 而使用#seq 1 10也可以,只

统计重复字符串 如 eeefffkkkhjk 得到如下结果 3e3f3khjk;

//统计重复字符串 如 eeefffkkkhjk 得到如下结果 3e3f3khjk; string zipStr = Console.ReadLine(); var charList = zipStr.ToCharArray(); var listArray = new List<char>(); foreach (var item in charList) { if (!listArray.Contains(item)) { listArray.Add(item); } } var dic

Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素

1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5)拿着个元素到新集合中去找,看有没有   有:不搭理它 没有:添加到新集合      (6)遍历新集合 2. 案例代码: 1 package cn.itcast_04; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 6

JS去除重复字符串

去除重复字符串我用到的三种方法: 把例子贴上,用jquery方便些,首先要搭好环境,就是在同一目录下(同一文件夹下)保证有所使用的jquery1.8.1(如果是其他版本就在html代码中作相应改动) 第一. [html] view plaincopy <html> <head> <script src="jquery-1.8.1.js"></script> <SCRIPT LANGUAGE="JavaScript"

字符串全排列 java实现

经常会遇到字符串全排列的问题.例如:输入为{'a','b','c'},则其全排列组合为abc,acb,bac,bca,cba,cab.对于输入长度为n的字符串数组,全排列组合为n!种. package Bayes; public class RecursionTree { public static void permutation(char[] s,int from,int to) { if(to<=1) { return; } if(from ==to) { System.out.print

[华为机试练习题]15.删除重复字符/删除重复字符串

题目 题目标题: 删除重复字符 给定一个字符串,将字符串中所有和前面重复多余的字符删除,其余字符保留,输出处理后的字符串.需要保证字符出现的先后顺序,并且区分大小写. 详细描述: 接口说明 原型: int GetResult(const char *input, char *output) 输入参数: input 输入的字符串 输出参数(需考虑指针指向的内存区域是否有效): output 输出的字符串 返回值: 0 成功 -1 失败及异常 举例: 输入: abadcbad,那么该单词中红色部分的

Oracle 去掉重复字符串

create or replace function remove_same_string(oldStr varchar2, sign varchar2) return varchar2 is /**************************************************** ** Oracle去掉重复字符串 ** 函数名称:RemoveSameStr ** 参 数:[名称] [类型 ] [说明] ** oldStr varchar2 要处理的字符串 ** sign va

WPF中使用Hashtable剔除重复字符串(比如电话号码)

原文:WPF中使用Hashtable剔除重复字符串(比如电话号码) 本文中的输入框中的字符串是逗号隔开的,你可以换成其他特别的字符串. 本篇中的亮点:1. 里面有一个玻璃样式按钮,用XAML制作2. WPF下TextBox允许多行文本的设置3. 使用Hashtable剔除重复字符串(比如电话号码) 运行时的样子:(为了保护隐私,做了虚化及其他处理) WPF下TextBox允许多行文本的设置:需要:(1)将TextWrapping设为"Wrap"(2)将AcceptsReturn设为&q

带重复的全排列问题

明白带重复的全排列首先要明白不带重复的全排列(不带重复的全排列链接) 在不带重复的全排列中说到在排列1,2,3,4插入5有5种方式,会生成5种新的排列. 如果我们在1,1,2,3中插如4也有五种方式, (1)4,1,1,2,3 (2)1,4,1,2,3 (3)1,1,4,2,3 (4)1,1,2,4,3 (5)1,1,2,3,4 生成了五种排列 但如果在1,2,3,4中插如1 (1)1,1,2,3,4 (2)1,1,2,3,4 (3)1,2,1,3,4 (4)1,2,3,1,4 (5)1,2,3