簡體   English   中英

在 java 中僅使用字符串 class 檢查字謎

[英]Check for an anagram using only the string class in java

我的任務是編寫一個接受 2 個單詞的程序,然后返回它們是否是彼此的字謎。 目前我正在嘗試遍歷第一個字母的每個字母,並檢查它是否與第二個單詞中的字母匹配。 然后,我將計數器 int 與任一單詞的總長度進行比較,如果它們是字謎,它們應該相等。

我有一個錯誤,如果單詞是字謎,我目前會無限循環向上計數,並且計算以程序結尾的單詞中的字母數,如果不是,則不會關閉。

分配狀態“僅使用字符串 class 中可用的方法。不要使用其他 Java 庫實用程序”,所以我無法將單詞放入數組並使用 ZA3CBC3F9D0CE2F2C1554E1B671D71D9ZC

import java.util.Scanner;

public class anagram {
  public static void main (String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter two strings");

    String s1 = scanner.next();
    String s2 = scanner.next();


    int counter = 0;

    int number1 = 0;
    int number2 = 0;

    if(s1.length() != s2.length()) {
        System.out.println("The strings are not anagrams");
    }   else {


        for(int i = 0; i < s1.length() ; i++) {
            for(int j = 0; j < s1.length() ; i++) {

                // number1 = i;
                // number2 = j;

                if(i == s1.length()){
                    number1 = i - 1;
                }
                if(j == s2.length()){
                    number2 = j - 1;
                }


                if(s1.charAt(number1) == s2.charAt(number2)) {
                    counter ++ ;
                    System.out.println(counter);
                }

            }

        }
        System.out.println(counter);

    }

    System.out.println(s1 + " " + s2 + " " + counter);

}

}

你的問題就在這里

 for(int j = 0; j < s1.length() ; j++) {   ///change i to j

您正在檢查n^2次,但是這只能完成2n次。

  1. 從第一個字符串中獲取所有字母的出現(存儲在數組中)
  2. 從第二個字符串中獲取所有字母的出現(存儲在數組中)
  3. 同時遍歷兩個數組,並比較是否所有出現都相同。

您的陣列將具有26個元素存儲的發生az (如果情況不敏感)

在for循環的第二級中,您將遞增i而不是j。 因為j從不增加,所以(j <s1.length)始終為true。

import java.util.Scanner;

public class anagram {
  public static void main (String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter two strings");

    String s1 = scanner.next();
    String s2 = scanner.next();


    int counter = 0;

    int number1 = 0;
    int number2 = 0;

    if(s1.length() != s2.length()) {
        System.out.println("The strings are not anagrams");
    }   else {


        for(int i = 0; i < s1.length() ; i++) {
            for(int j = 0; j < s1.length() ; j++) { //LOOK HERE <======

                // number1 = i;
                // number2 = j;

                if(i == s1.length()){
                    number1 = i - 1;
                }
                if(j == s2.length()){
                    number2 = j - 1;
                }


                if(s1.charAt(number1) == s2.charAt(number2)) {
                    counter ++ ;
                    System.out.println(counter);
                }

            }

        }
        System.out.println(counter);

    }

    System.out.println(s1 + " " + s2 + " " + counter);

}
}
public class Main {

    static boolean isAnagram(String a, String b) {
        // Complete the function
        boolean flag = true;
        if (a.length() != b.length())
            return false;
        char str1[] = a.toCharArray();
        char str2[] = b.toCharArray();
        int countstr1[] = countLetters(str1);
        int countstr2[] = countLetters(str2);
        for (int i = 0; i < countstr1.length; i++) {
            if (countstr1[i] != countstr2[i])
                flag = false;
        }

        return flag;
    }

    public static void main(String[] args) {
        String a = "anagram";
        String b = "margana";
        boolean ret = isAnagram(a, b);
        System.out.println((ret) ? "Anagrams" : "Not Anagrams");
    }

    /** Count the occurrences of each letter */
    public static int[] countLetters(char[] chars) {
        // Declare and create an array of 26 int
        int[] counts = new int[26];
        // For each lowercase letter in the array, count it
        for (int i = 0; i < chars.length; i++)
            counts[Character.toLowerCase(chars[i]) - 'a']++;
        return counts;
    }

}

countLetters方法是這個程序中真正的英雄。 該方法計算每個字符的出現頻率並將其存儲在一個數組中,並將該數組返回給調用方法。 該程序忽略大小寫並確定兩個字符串是否為字謎

暫無
暫無

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

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