java - 这个语法“搜索:”在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;
}
解决方案
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;
}
推荐阅读
- android - Android Studio 向上滑动按钮
- pine-script - 指示面板上的 PineScript 绘图形状或箭头
- .net - 包“dotnet-sonarscanner 5.0.4”有一个包类型“DotnetTool”,项目“Project.xyz”不支持
- postgresql - 是否有一个 postgres 函数来可变地更新二进制数据结构?
- excel - FindElementByID 不适用于 Selenium Webdriver (Excel VBA) 中的链接
- reactjs - 找不到模块:错误:尝试运行 webpack 时无法解析“”
- discord.py - discord.py 使命令冷却
- laravel - Laravel livewire 没有获取数据(DateRangePicker)
- linux - 如果发布了新的 gcp 功能,terraform 的更新速度有多快?
- mysql - 我如何知道某个时期的所有值是否都超过 10?