含重复字符的字符串的全排列问题(Java)

本代码既可以输出重复和不重复字符串的全排列

/**
 * 含重复字符的字符串的全排列问题
 *
 *
 */
public class S_28 {
    public static int count = 0;
    public static void  main(String[] args){
        char[] list = {‘a‘,‘b‘,‘c‘};
        char[] list1 = {‘a‘,‘b‘,‘b‘};
        //permutation(list);
        permutation(list1);
        System.out.println("all numbers: "+ count);
    }
    public static void permutation(char list[]) {
        if(list == null)
            return;
        else
            permutation(list,0,list.length-1);
    }
    private static void permutation(char[] list, int start, int end) {
        if(start == end){
            //System.out.println(list);
            for(int i=0;i<=end;i++){  

                System.out.print(list[i]);  

            }
            count++;

            System.out.println();
        }
        else{
            for(int i = start;i<=end;++i){
                if(isSwap(list,start,i)){
                    Swap(list,start,i);
                    permutation(list, start+1, end);
                    Swap(list,start,i);

                }
            }
        }
    }
     public static void Swap(char list[], int i, int j) {
          char temp = list[i];
          list[i] = list[j];
          list[j] = temp;
    }
     //判断当前"i"处的字符是否之前已经出现过,出现过则返回false,不交换
    private static boolean isSwap(char[] list, int start, int i) {
        for(int k = start; k<i;k++)
            if(list[k] == list[i])
                return false;
        return true;
    }

上述代码数组,list和list1的全排列的最终结果输出如下

    list数组的全排列结果:

    list1数组的全排列结果:

时间: 2024-11-08 14:18:40

含重复字符的字符串的全排列问题(Java)的相关文章

新增5 最长不含重复字符的子字符串

请从字符串中找出一个最长不含重复字符的子字符串,计算该最长子字符串的长度.例如字符串"arabcacfr"中,最长不含重复字符的子字符串是"acfr",长度为4. 思路:cur当前最长,max全局最长:hash数组记录字符对应下标:遍历字符串,如果字符对应hash值小于0,说明字符未出现,cur直接+1即可:如果大于等于0出现了说明重复字符,那就需要判断,如果两次出现长度差d大于cur说明重复字符不在当前cur长的字符串中,无需在意,cur+1即可,如果d小等于cu

最长不含重复字符的子字符串

输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度.例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4. 1 public static int longestSubStringWithoutDuplication(String str) { 2 int curLen = 0 ; 3 int maxLen = 0 ; 4 int[] preIndex = new int[26] ; 5 for(int i = 0 ; i < 26 ; i

剑指offer:最长不含重复字符的子字符串

题目:最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.假设字符串中只包含从'a'到'z'的字符.例如,在字符串中"arabcacfr",最长非重复子字符串为"acfr",长度为4. # -*- coding: utf-8 -*- # @Time : 2019-07-11 10:57 # @Author : Jayce Wong # @ProjectName : job # @FileName : longes

《剑指offer》第四十八题:最长不含重复字符的子字符串

// 面试题48:最长不含重复字符的子字符串 // 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子 // 字符串的长度.假设字符串中只包含从'a'到'z'的字符. #include <string> #include <iostream> // 方法一:蛮力法 bool hasDuplication(const std::string& str, int position[]); int longestSubstringWithoutDuplicat

剑指offer-最长不含重复字符的子字符串-JavaScript

题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 题目分析 留意最长子串和子序列不是一个概念.例如对"pwwkew"来说,最长子串是"wke","pwke"是其中一个子序列. 在不考虑时间的情况下,直接暴力法对所有的子串进行检查.复杂度是\(O(N^3)\),会超时错误. 解法 1: 滑动窗口 准备 2 个指针 i.j,i 指向窗口左边,j 指向右边.指针每次可以向前"滑动"一个位置,它

输出多个重复字符或字符串

print(数量 * '字符或字符串') #输出空格 print(10 * ' ') #重复输出字符 print(10 * 'a') #重复输出字符串 print(10 * 'abc')

左神算法第八节课:介绍递归和动态规划(汉诺塔问题;打印字符串的全部子序列含空;打印字符串的全排列,无重复排列;母牛数量;递归栈;数组的最小路径和;数组累加和问题,一定条件下最大值问题(01背包))

暴力递归: 1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解 动态规划 1,从暴力递归中来 2,将每一个子问题的解记录下来,避免重复计算 3,把暴力递归的过程,抽象成了状态表达 4,并且存在化简状态表达,使其更加简洁的可能 一:递归 1. 汉诺塔问题 汉诺塔问题(不能大压小,只能小压大),打印n层汉诺塔从最左边移动到最右边的全部过程. 左中右另称为 from.to.hel

字符串的全排列(java)

差不多半个月没写博客了,今天再写一篇. 字符串全排列相信大家都不陌生,对于我来说真的是写了又忘,忘了又写,所以决定写成一篇博客,废话不多说下面我来分析问题: 问题描述:给定一个字符串写出它的全排列,例如ab,全排列是ab,ba,而abc的全排列abc,acb,bac,bca,cab,cba. 解题思路:我们以具体例子分析,假如abc,如上所示,它的全排列是不是就是把字符串中每一个字符,放在第一位,然后再对剩下的字符串做全排列,如把a放在第一位,剩下bc 全排列是bc,cb,组合起来就是abc,a

LeetCode--003--无重复字符的最长子串(java)

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1. 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke&qu