(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");
}
}