前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串的全排列(java)

字符串的全排列(java)

作者头像
actionzhang
发布2022-11-30 17:03:31
6660
发布2022-11-30 17:03:31
举报
文章被收录于专栏:action的经验之路

       差不多半个月没写博客了,今天再写一篇。

       字符串全排列相信大家都不陌生,对于我来说真的是写了又忘,忘了又写,所以决定写成一篇博客,废话不多说下面我来分析问题:

问题描述:给定一个字符串写出它的全排列,例如ab,全排列是ab,ba,而abc的全排列abc,acb,bac,bca,cab,cba。

解题思路:我们以具体例子分析,假如abc,如上所示,它的全排列是不是就是把字符串中每一个字符,放在第一位,然后再对剩下的字符串做全排列,如把a放在第一位,剩下bc

全排列是bc,cb,组合起来就是abc,acb,那么把b放在第一位,剩下字符串的排列是ac,ca,组合起来就是,bac,bca。那么把字符串中所有的字符都放在第一位一次,等这些过程全部做完,那么就是一个字符串的全排列。所以这就是一个递归的思路,把字符串分为两部分,第一部分是取出的字符,第二部分是剩下的字符组成的字符串,把第一部分放在第一位,把第二部分的全排列放在第二位。那么怎么把第一部分和第二部分组合起来才是关键,因为第一部分,只是一个字符,第二部分是全排列,是好几个字符串,我的思路是一种字符积累的思路,我们把第一部分积累起来成一个字符串,开始的时候这个字符串是一个空字符串,当我们取出一个字符,把这个字符添加到这个字符串的末尾,然后形成一个新的字符串,这就把第一个字符积累起来了,然后把这个积累起来的字符串当做一个参数,传递给第二部分要做全排列的函数中,第二部分在做全排列的时候,还是把取出的字符加到哪个积累字符串的后面,那么第二部分越拆越短,知道不能拆了,这时候这个积累字符串其实就是全排列中的一个字符串,然后将这个积累字符串输出就好。

下面是我的代码:

代码语言:javascript
复制
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Test {
    public static void getFull(String str){
    	if(str==null){
    		System.out.println("null");
    	}else{
    	    getFull(str,"",str.length(),new HashSet<String>());
    	}
    }
	private static void getFull(String str,String has,int length,Set<String> set){
			for(int i=0;i<str.length();i++){
				StringBuilder sb=new StringBuilder();
				char single=str.charAt(i);
				String front="";
				String behind="";
				if(i==0){
					front="";
					behind=str.substring(1);
				}else if(i==str.length()-1){
					front=str.substring(0, str.length()-1);
					behind="";
				}else{
					front=str.substring(0, i);
					behind=str.substring(i+1);
				}
				sb.append(front);
				sb.append(behind);
				String temp=has+String.valueOf(single);
				if(temp.length()==length){
					if(!set.contains(temp)){
						 set.add(temp);
				  	     System.out.println(temp);
					}
				}
				getFull(sb.toString(), temp,length,set);
			}
	}
	public static void main(String[] args) {
		getFull("abc");
		
	}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档