String-------字符串的排列+字符串的旋转(Java)



字符串的排列

题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。


import java.util.ArrayList;
public class Solution {
     public ArrayList<String> Permutation(String str) {
         ArrayList<String> result = new ArrayList<String>();
         if (str== null ||str.length()== 0 ){
             return result;
         }
         int len=str.length()- 1 ;
         int i,j;
         char temp;
         char [] strChar=str.toCharArray();
         countSort(strChar);//Arrays.sort(strChar);
         char [] maxStr= new char [len+ 1 ];
         for (i= 0 ;i<=len;i++){
             maxStr[i]=strChar[len-i];
         }
         while (!String.valueOf(strChar).endsWith(String.valueOf(maxStr))){
             result.add(String.valueOf(strChar));
             i=len;
             while (strChar[i]<=strChar[i- 1 ]){
                 i--;
             }
             for (j=len;j>=i;j--){
                 if (strChar[j]>strChar[i- 1 ]){
                     temp=strChar[i- 1 ];
                     strChar[i- 1 ]=strChar[j];
                     strChar[j]=temp;
                     break ;
                 }
             }
             for ( int k=i;k<=(len+i)/ 2 ;k++){
                 temp=strChar[k];
                 strChar[k]=strChar[len+i-k];
                 strChar[len+i-k]=temp;
             }
         }
         result.add(String.valueOf(strChar));
         return result;
     }
     private void countSort( char [] strChar) {
         int len=strChar.length;
         int [] count= new int [ 58 ];
         int j= 0 ;
         for ( int i= 0 ;i<len;i++){
             count[strChar[i]- 65 ]++;
         }
         for ( int i= 0 ;i< 58 ;i++){
             while (count[i]--!= 0 ){
                 strChar[j++]=( char ) (i+ 65 );
             }
         }
     }
}

字符串的旋转

对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。

给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果。

测试样例:
"ABCDEFGH",8,4
返回:"FGHABCDE"
import java.util.*;
public class StringRotation {
     public String rotateString(String A, int n, int p) {
         if (A== null ||n<= 1 ||n- 1 <=p)  return A;
         char [] temp=A.toCharArray();
         reverse(temp, 0 ,p);
         reverse(temp,p+ 1 ,n- 1 );
         reverse(temp, 0 ,n- 1 );
         return String.valueOf(temp);
     }
     public void reverse( char [] temp, int start, int end){
         while (start<end){
             char t;
             t=temp[start];
             temp[start++]=temp[end];
             temp[end--]=t;
         }
     }
 
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值