簡體   English   中英

如何將char數組存儲到字符串數組中並在java中對該字符串數組進行排序?

[英]how to store the char array into string array and sort that string array in java?

給定 2 個字符串 A 和 B,打印 2 個字符串的所有交錯。 給定兩個字符串的交錯字符串保留單個字符串中字符的順序並使用兩個字符串的所有字符。 為簡單起見,您可以假設字符串具有唯一字符。

輸入:
2
NKB GL
bn zh
我寫了一些代碼,但我沒有得到排序的字符串。

public class Test {

static void interleavings(String A, String B, char[] ans, int m, int n, int idx) 
{
    if(m==0 && n==0) 
    {
        System.out.println(ans);
        return;
    } 
    if(m != 0) 
    {
        ans[idx]=A.charAt(0);
        interleavings(A.substring(1,m), B, ans, m-1, n, idx+1);
    } 
    if(n != 0) 
    {
        ans[idx]= B.charAt(0);
        interleavings(A, B.substring(1,n), ans, m, n-1, idx+1);
    }
}
public static void main(String[] args) 
{
    Scanner s =  new Scanner(System.in);
    int t = s.nextInt();
    for(int i = 0; i < t; i++)
    {
        String s1=s.next();
        String s2=s.next();
        char [] ans = new char[s1.length()+s2.length()];
        System.out.println("Case #"+(i+1)+":");
        interleavings(s1,s2,ans,s1.length(),s2.length(),0);  
    }
}

}

我的 output
情況1:
nkbgl
nkgbl
nkglb
ngkbl
ngklb
nglkb
gnkbl
gnklb
gnlkb
glnkb
案例2:
bnzh
bznh
bzhn
zbnh
zbhn
zhbn
預期 output
情況1:
glnkb
gnkbl
gnklb
gnlkb
ngkbl
ngklb
nglkb
nkbgl
nkgbl
nkglb
案例2:
bnzh
bzhn
bznh
zbhn
zbnh
zhbn

我是 java 的新手,有人可以指導我。 請問如何解決這個問題。

我不會使用char數組,因為它會使事情變得更復雜。 我會將當前值作為字符串傳遞。 請參閱curr + A.charAt(0)這會將 append char轉換為String ,這樣您就不會處理char

將結果存儲在Collection中。 你可以在完成后對整個集合進行排序並打印它,而不是即時進行。

class Main {

    public static void interleavings(String curr, String A, String B, Set<String> result) {
        if (A.length() == 0 && B.length() == 0) {
            result.add(curr);
            return;
        }
        if (A.length() > 0) {
            interleavings(curr + A.charAt(0), A.substring(1), B, result);
        }
        if (B.length() > 0) {
            interleavings(curr + B.charAt(0), A, B.substring(1), result);
        }
    }

    public static void main(String[] args) {
        String A = "bn";
        String B = "zh";

        Set<String> result = new HashSet<>();
        interleavings("", A, B, result);

        // this will print all the results sorted
        result.stream()
              .sorted()
              .forEach(System.out::println);
    }
}

a.compareTo(b) > 0時,您應該交換ab ,然后進行遞歸調用。

static void interleavings(String a, String b, String result) {
    if (a.isEmpty() && b.isEmpty())
        System.out.println(result);
    else if (a.compareTo(b) > 0)
        interleavings(b, a, result);
    else {
        if (!a.isEmpty())
            interleavings(a.substring(1), b, result + a.charAt(0));
        if (!b.isEmpty())
            interleavings(a, b.substring(1), result + b.charAt(0));
    }
}

interleavings("nkb", "gl", "");
interleavings("bn", "zh", "");

output

glnkb
gnkbl
gnklb
gnlkb
ngkbl
ngklb
nglkb
nkbgl
nkgbl
nkglb
bnzh
bzhn
bznh
zbhn
zbnh
zhbn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM