簡體   English   中英

如何對字符串進行排序並檢查字謎?

[英]How to sort a String and check for anagrams?

我應該編寫一個算法來測試兩個字符串以檢查它們是否是彼此的字謎,我必須使用 BubbleSort、SelectionSort 或 InsertionSort。 所以我使用 SelectionSort 對字符串進行排序,我事先將其轉換為 char arrays,但它不起作用,我找不到我的錯誤。

public static void selectionSort(char[] arr) {

    for (int i = 0; i < arr.length - 1; i++) {
        int least = i;
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[least])
                least = j;
            if (least != i) {
                int swap = arr[i];
                arr[i] = arr[least];
                arr[least] = (char) swap;

            }
        }
    }
}

public static boolean anagramCheck(String x, String y) {

    x.trim();
    y.trim();

    x.toLowerCase();
    y.toLowerCase();

    char xarr[] = x.toCharArray();
    char yarr[] = y.toCharArray();

    if (x.length() != y.length())
        return false;

    selectionSort(xarr);
    System.out.println(xarr); // I used this to check if the Strings are sorted correctly
    selectionSort(yarr);
    System.out.println(yarr);

    if (xarr == yarr) {
        System.out.println("It's an anagram.");
        return true;
    } else {
        return false;
    }
}

我應該忽略大寫字母和空格,這就是我使用 trim() 和 toLowerCase() 的原因。 但它既不修剪空格也不將大寫字母更改為小寫字母。 此外,當我使用超過 5 個字母時,它不會按字母順序對給定的字符串進行排序。 兩者中只有一個是正確排序的,另一個是混亂的。 我是 Java 編程的新手,所以我可能需要一些幫助。 提前致謝

這應該有效。 但我使用了bubbleSort

class HelloWorld {
  public static void main(String[] args) {
      System.out.println(anagramCheck("listen", "silent"));
  }
  public static boolean anagramCheck(String x, String y) {

    x.trim();
    y.trim();

    x.toLowerCase();
    y.toLowerCase();

    char xarr[] = x.toCharArray();
    char yarr[] = y.toCharArray();

    if (x.length() != y.length())
       return false;

    x = bubbleSort(xarr);
    System.out.println(xarr); // I used this to check if the Strings are sorted correctly

    y = bubbleSort(yarr);
    System.out.println(yarr);

    if (x.equals(y)) {
       System.out.println("It's an anagram.");
       return true;
    } else {
        return false;
    }
   }

   public static String bubbleSort(char[] arr) {

    int n = arr.length;
    for (int i = 0; i < n-1; i++){
        for (int j = 0; j < n-i-1; j++){
            if (arr[j] > arr[j+1])
            {
                // swap arr[j+1] and arr[j]
                char temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    
    return String.valueOf(arr);
  }

}

檢查我在哪里進行了修改。

public static void selectionSort(char[] arr) {

for (int i = 0; i < arr.length - 1; i++) {
    int least = i;
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[j] < arr[least])
            least = j;
    }
    if (least != i) {
         int swap = arr[i];
         arr[i] = arr[least];
         arr[least] = (char) swap;

    }
  }
}

在 anagramCheck function 中:

x = x.trim(); // 它返回修剪字符串

y = y.trim();

x = x.toLowerCase(); // 返回小寫字符串

y = y.toLowerCase();

Bro 字符串是不可變的,String 上的所有方法都會生成一個新實例。 您必須將值的結果分配給變量,例如newx=x.trim().toLowerCase();

我無法修復算法中的任何錯誤,實際上我的算法非常糟糕

暫無
暫無

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

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