字符串

  (1)字符与字符串

   字符:一般被认为是字母、数字、符号和字。字母就是A、B、C、a、b、c等,而数字 1,2,3等,字可能是中文和英文字等。

  字符串是有字符组成的。一般编程语言中用String类型来表示。在java 中String的实现通过char数组实现的。

   (2)字符串的全排列: 比如给定一个字符串是xyz,则其全排列是xyz, xzy, yxz,yzx,zxy,zyx 共6种。

   

   字符串的全排列的实现代码如下:

package com.threeTop.www;

/**
 * 字符串的全排列
 * @author wjgs
 *
 */
public class FullPermutation {
        /**
         * ASCII码排序全排列
         */
	  public static  void  asciiPermutation(String str)
	  {
		  //获取字符串每个字符的ASCII
		  char[]array=str.toCharArray();
		  //需要先排序
		  shellsort(array);
		  
		  int length=array.length;
		  int i=0;
		  while(true)
		  {
			  System.out.println(array);
			  
			  //找到数组中第1个被打乱次序的坏人的位置
			  for(i=length-2;(i>=0)&&(array[i]>=array[i+1]);--i)
			  {
				  
			  }
			  //当i<0时,说明已经遍历到第1个元素的前面了,结束
			  if(i<0)
			  {
				  return;
			  }
			  int j;
			  //找到排列中第i位的右边最后一个比其大的数的位置j
			  for(j=length-1;(j>i)&&(array[j]<=array[i]);--j)
			  {
				  
			  }
			  //交换 i,j的值
			  swap(array,i,j);
			  
			  //把i位置后面的部分内容反转
			  reverse(array,i+1,length-1);
			  
			  
		  }
		  
		  
		  
	  }
	  /**
	   * 字符数组指定区间的反转
	   * @param array
	   * @param start
	   * @param end
	   */
	  private static void reverse(char[] array, int start, int end) {
			int  mid=(end-start)/2+start;
			
			for(int i=0;i<=mid-start;i++)
			{
				swap(array,start+i,end-i);
			}	
			
		}
	/**
	   * 交换数组指定位置的互换
	   * @param array
	   * @param i
	   * @param j
	   */
           private static void swap(char[] array, int i, int j)
         {
			char temp=array[i];
			array[i]=array[j];
			array[j]=temp;   
        	   
		}
		/**
            * 根据字符ASCII码进行希尔排序
            * @param array
            */
		private static void shellsort(char[] array) {
			// TODO Auto-generated method stub
			char temp;
			
			for(int k=array.length/2;k>0;k/=2)
			{
				for(int i=k;i<array.length;i++)
				{
					for(int j=i;j>=k;j-=k)
					{
						if(array[j-k]>array[j])
						{
							temp=array[j-k];
							array[j-k]=array[j];
							array[j]=temp;
						}
					}
				}
			}
		}
		
		
		public static void main(String[]args)
		{   
			System.out.println("三个字符的全排列:");
			FullPermutation.asciiPermutation("bcd");
			System.out.println("四个字符的全排列:");
			FullPermutation.asciiPermutation("bcda");
			
		}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值