首页 > 解决方案 > 这个语法“搜索:”在java中是什么意思

问题描述

所以我在研究 leetcode 并遇到了一个看起来像这样的解决方案。语法“搜索:”和“继续搜索”是什么意思?做?在我编写 for 循环之前,我从未见过这种语法。提前致谢!

public boolean isAlienSorted(String[] words, String order) {
    int[] index = new int[26];
    for (int i = 0; i < order.length(); ++i)
        index[order.charAt(i) - 'a'] = i;

    search: for (int i = 0; i < words.length - 1; ++i) {
        String word1 = words[i];
        String word2 = words[i+1];

        // Find the first difference word1[k] != word2[k].
        for (int k = 0; k < Math.min(word1.length(), word2.length()); ++k) {
            if (word1.charAt(k) != word2.charAt(k)) {
                // If they compare badly, it's not sorted.
                if (index[word1.charAt(k) - 'a'] > index[word2.charAt(k) - 'a'])
                    return false;
                continue search;
            }
        }

        // If we didn't find a first difference, the
        // words are like ("app", "apple").
        if (word1.length() > word2.length())
            return false;
    }
    return true;
         }

标签: java

解决方案


  • 那是一个标签(参见goto -类似于 C),在这里解决问题是不必要的。

  • 以下解决方案将简单地通过:

class Solution {

    int[] letterMap = new int[26];

    public final boolean isAlienSorted(
        final String[] words,
        final String order
    ) {
        for (int index = 0; index < order.length(); index++) {
            letterMap[order.charAt(index) - 'a'] = index;
        }

        for (int index = 1; index < words.length; index++)
            if (wordIsLarger(words[index - 1], words[index])) {
                return false;
            }

        return true;
    }

    private final boolean wordIsLarger(
        final String a,
        final String b
    ) {
        final int lengthA = a.length();
        final int lengthB = b.length();

        for (int index = 0; index < lengthA && index < lengthB; index++)
            if (a.charAt(index) != b.charAt(index)) {
                return letterMap[a.charAt(index) - 'a'] > letterMap[b.charAt(index) - 'a'];
            }

        return lengthA > lengthB;
    }
}

如果我们将其格式化,我们可以更容易地看到:

public boolean isAlienSorted(String[] words, String order) {
    int[] index = new int[26];

    for (int i = 0; i < order.length(); ++i) {
        index[order.charAt(i) - 'a'] = i;
    }

    search:

    for (int i = 0; i < words.length - 1; ++i) {
        String word1 = words[i];
        String word2 = words[i + 1];

        // Find the first difference word1[k] != word2[k].
        for (int k = 0; k < Math.min(word1.length(), word2.length()); ++k) {
            if (word1.charAt(k) != word2.charAt(k)) {
                // If they compare badly, it's not sorted.
                if (index[word1.charAt(k) - 'a'] > index[word2.charAt(k) - 'a'])
                { return false; }

                continue search;
            }
        }

        // If we didn't find a first difference, the
        // words are like ("app", "apple").
        if (word1.length() > word2.length()) {
            return false;
        }
    }

    return true;
}

推荐阅读