查找字符串的所有排列的Java程序
1 说明
为了解决这个问题,我们需要了解回溯的概念。
根据回溯算法:
- 将角色固定在第一个位置,然后将其余字符替换为第一个字符。像在ABC中一样,在第一次迭代中,通过分别将A与A,B和C交换来形成三个字符串:ABC,BAC和CBA。
- 对其余字符重复步骤1,例如固定第二个字符B,依此类推。
- 现在再次交换以返回到先前的位置。例如,从ABC,我们通过再次固定B来形成ABC,然后回溯到先前的位置并与C交换B。因此,现在我们有了ABC和ACB。
- 对BAC和CBA重复这些步骤,以获取所有排列。
2 算法思路
main()函数
- 步骤1:开始
- 步骤2:定义字符串str =“ ABC”。
- 步骤3: len = str.length()。
- 步骤4:打印“All the permutations of the string are:”
- 步骤5:呼叫generatePermutation(str,0,len)。
- 步骤6:结束
generatePermutation(String str, int start, int end)函数
- 步骤1:开始
- 步骤2: if(start == end-1)
PRINT str
否则转到步骤3 - 步骤3: SET i =开始。直到i <结束,将步骤4重复到步骤7。
- 步骤4: str = swapstring(str,start,i)。
- 步骤5: generatePermutation(str,start + 1,end)。
- 步骤6: str = swapstring(str,start,i)。
- 步骤7: i = i + 1
- 步骤8:结束
swapString(String a, int i, int j)函数
- 步骤1:开始
- 步骤2: char [] b = a.toCharArray()
- 步骤3:定义图表
- 步骤4: ch = b [i]
- 步骤5: b [i] = b [j]
- 步骤6: b [j] = ch
- 步骤7:返回String.ValueOf(b)
- 步骤8:结束
3 程序实现
/**
* 一点教程网: http://www.yiidian.com
*/
public class PermuteString {
//Function for swapping the characters at position I with character at position j
public static String swapString(String a, int i, int j) {
char[] b =a.toCharArray();
char ch;
ch = b[i];
b[i] = b[j];
b[j] = ch;
return String.valueOf(b);
}
public static void main(String[] args)
{
String str = "ABC";
int len = str.length();
System.out.println("All the permutations of the string are: ");
generatePermutation(str, 0, len);
}
//Function for generating different permutations of the string
public static void generatePermutation(String str, int start, int end)
{
//Prints the permutations
if (start == end-1)
System.out.println(str);
else
{
for (int i = start; i < end; i++)
{
//Swapping the string by fixing a character
str = swapString(str,start,i);
//Recursively calling function generatePermutation() for rest of the characters
generatePermutation(str,start+1,end);
//Backtracking and swapping the characters again.
str = swapString(str,start,i);
}
}
}
}
以上代码输出结果为:
All the permutations of the string are:
ABC
ACB
BAC
BCA
CBA
CAB
热门文章
优秀文章