Ⅰ java 輸入一個字元串,列印出該字元串中字元的所有排列
實現思路:就是輸入字元串後,通過遞歸的方式,循環每個位置和其他位置的字元。
importjava.util.Scanner;
publicclassDemo001{
publicstaticvoidmain(String[]args){
Stringstr="";
Scannerscan=newScanner(System.in);
str=scan.nextLine();
permutation(str.toCharArray(),0);
}
publicstaticvoidpermutation(char[]str,inti){
if(i>=str.length)
return;
if(i==str.length-1){
System.out.println(String.valueOf(str));
}else{
for(intj=i;j<str.length;j++){
chartemp=str[j];
str[j]=str[i];
str[i]=temp;
permutation(str,i+1);
temp=str[j];
str[j]=str[i];
str[i]=temp;
}
}
}
}
Ⅱ java 字元串排序
//這個絕對滿足您的要求
import java.util.Arrays;
public class StringSort {
public static void main(String[] args) {
String ss[]={"ab","wang","hi","a","abff"};
MyString mySs[]=new MyString[ss.length];//創建自定義排序的數組
for (int i = 0; i < ss.length; i++) {
mySs[i]=new MyString(ss[i]);
}
Arrays.sort(mySs);//排序
for (int i = 0; i < mySs.length; i++) {
System.out.println(mySs[i].s);
}
}
}
class MyString implements Comparable<MyString>{
public String s;//包裝String
public MyString(String s) {
this.s = s;
}
@Override
public int compareTo(MyString o) {
if(o==null||o.s==null) return 1;
if(s.length()>o.s.length()) return 1;
else if(s.length()<o.s.length()) return -1;
return s.compareTo(o.s);
}
}
Ⅲ java:字元串排序問題
public class test{
public static void main(String[] args) {
String[] str = {"acbcc","bgd","abvc","fkei","dsad","gt"};
String temp;
System.out.print("排序前數組:");
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]+"\t");
}
System.out.println("");
for (int i = 0; i < str.length; i++) {
for (int j = 0; j < str.length - i - 1; j++) {
/**冒泡排序比較說明:
1.先取出每一個元素字元串第一個字元(substring(0,1)這個就是取第一個元素的字元)
2.然後將這個字元串轉換成char型(charAt(0)這個就是將一個單字元串轉換成char型)
3.接著將char型字元轉換成整型(這一步只要是求一個字元的ASCII碼,因為ASCII碼是一個整型數字,這樣做是便於比較)
4.最後通過比較使用冒泡排序
*/
if ((int)(str[j].substring(0,1).charAt(0)) > (int)(str[j+1].substring(0,1).charAt(0))) {
temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
System.out.print("排序後數組:");
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]+"\t");
}
}
}
Ⅳ 含有重復字元的字元串排列組合
排列:從給定個數的元素中取出指定個數的元素進行排序
組合:從給定個數的元素中取出指定個數的元素,不考慮排序
排列包含了組合的過程,從給定個數的元素中取出指定個數元素(組合),然後再把取出的元素進行排序。
這意味著,我們利用組合得到組合數,然後利用組合數實現全排列,就得到了排列。
一般組合指的是取出1~n個元素的組合,因為全組合只有一個
輸入一個長度為n的字元串,輸出該字元串中字元的所有組合
如果輸入"abc",它的組合有a、b、c、ab、ac、bc、abc
①假設在長度為n的字元串中求m個字元的組合
②從頭掃描字元串的第一個字元,有兩種選擇:
(1)把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選取m-1個字元
(2)不把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選擇m個字元
注意:所有字元取出擺放的位置都是以原來的相對位置,不改變原來的前後順序
基本思路 :求組合,表示可以取少於總字元個數的字元組合,因為全字元組合就一個,則假設輸入字元個數為n個,則最終組合結果是(2^n - 1)個。
原因 :假設字元為a,b,c,則1表示取c元素,0表示不取c。所以001表示取c,010取b,100取a,011取bc.所以一共三位,每個位上有兩個選擇0,1.所以是(2^n - 1)個結果。依次表示為: 001,010,011,100,101,110,111 。對應輸出組合結果為: a, b ,ab,c,ac,bc,abc .
注意:這個思路也非常好~ 但是前提是 字元長度不超過32個
利用hashSet實現查重:第一次放入到hashSet輸出結果,如果遇到已經在hashSet中存在,則不輸出結果
注意 :由於利用HashSet實現去重,而不是直接在演算法上實現去重,增加了空間復雜度和時間復雜度,所以不是最優演算法。關於演算法優化,有待後面繼續提高和實現!
如果網友有更好的方法,還是多多指教!
輸入一個長度為n的字元串,輸出該字元串中字元的全排列
如果輸入「abc」,則全排列為abc、acb、bac、bca、cab和cba。
①遞歸實現,每遞歸一次取一個字元作為當前輸入字元的首字元。例如,輸入「abc」,則取第一個字元「a」,把字元「a」與第一個字元「a」交換,當前不用交換。剩下的字元「bc」,下次遞歸也是這樣。如果選取的是字元「b」,則在字元數組中把字元「b」與字元「a」交換,後面選取字元就是在「ac」中選取。如果選取的是字元「c」,與字元「a」交換,下次選取就是在「ba」中選取
②每次選取後,下次遞歸則需要把交換的字元順序,重新返回。
輸入一個長度為n的字元串,字元中包含重復字元,輸出字元的全排列
如果輸入「abb」,則全排列為abb, bab, bba
參考文獻
[1] 字元串的全排列和組合
[2] 字元串排列和組合的JAVA實現
[3] 字元串的全排列和組合演算法
[4] 帶有重復字元的字元數組的全排列
[5] java 全組合 與全排列
[6] 字元串組合——位運算
[7] java排列組合問題匯總【經典】
Ⅳ java中怎麼對一串字元進行排序!
importjava.util.Arrays;
publicclassStringSort{
publicstaticvoidmain(String[]args){
Stringstring="togoodtoonostringandnow";
StringsortString=sortChar(string);
System.out.println(sortString);
}
privatestaticStringsortChar(Stringstr){
//1.將字元串轉化成數組
char[]chs=stringToArray(str);
//2.對數組進行排序
sort(chs);
//3.將數組轉成字元串
returntoString(chs);
}
privatestaticStringtoString(char[]chs){
returnnewString(chs);
}
//對字元數組進行升序排序
privatestaticvoidsort(char[]chs){
Arrays.sort(chs);
}
//將字元串轉化成為數組
privatestaticchar[]stringToArray(Stringstring){
returnstring.toCharArray();
}
}