java - 在 Valid Anagram 程序中未通过所有测试用例
问题描述
给定两个字符串 s 和 t ,编写一个函数来确定 t 是否是 s 的字谜。
示例 1:
输入:s = "anagram", t = "nagaram" 输出:true 示例 2:
输入:s = "rat", t = "car" 输出:false
示例 3 "aad" "cab" 输出 true 预期 false
我的 3 个测试用例给出了正确的输出,为什么?
class Solution {
public boolean isAnagram(String s, String t) {
if (s.isEmpty() && t.isEmpty()) {
return true;
}
if (s.length() != t.length()) {
return false;
}
char[] a = s.toCharArray();
char[] b = t.toCharArray();
Arrays.sort(a);
Arrays.sort(b);
for (int i = 0; i <= a.length; i++) {
for (int j = 0; j <= b.length; j++) {
if (a[i] == b[j]) {
return true;
}
}
}
return false;
}
}
解决方案
通过使用嵌套的 for 循环,您将遍历每个可能的对(i, j),其中i和j分别位于 idexa
和b
中。此外,您使用i++
andj++
两次,因此您将跳过偶数索引。您不能从比赛true
的那一刻返回。a[i++] == b[j++]
为了知道某物是否是字谜,您需要遍历所有元素。但是,您可以false
从那一刻返回a[i] != b[i]
。最后界限应该是i < a.length
,不是i <= a.length
。
因此,您需要一个for
循环,在其中进行单个增量并a[i]
与b[i]
:
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()){
return false;
}
char[] a = s.toCharArray();
char[] b = t.toCharArray();
Arrays.sort(a);
Arrays.sort(b);
for(int i = 0; i < a.length; i++) {
if(a[i] != b[i]) {
return false;
}
}
return true;
}
推荐阅读
- vim - 我可以使用 ale 或 syntastic 作为 pre-write 钩子而不是 post-write 吗?
- iis - 如何使用 https 加密或隐藏 Chrome 开发者工具或 IE 中的响应数据?
- service-worker - 在 PWA 中,有没有办法检查等待的服务人员升级?
- kubernetes - 可以在 containerPort 上使用 valueFrom
- mysql - 如何从 MYSQL 中的 Varchar 字段中选择最大数值
- azure-data-factory - 在 ADFv2 中获取一个月的天数
- networking - 通过 VPN 从 GKE Pod 传出的流量
- android - 在 Android 上启动屏幕后,Unity 构建在灰屏上冻结
- android - Android Back Stack 不会清除
- python - 如何调整 Python 代码以映射到具有不同拼写但相同值的列名?