java – anagram检查的最佳解决方案?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – anagram检查的最佳解决方案?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1893字,纯文字阅读大概需要3分钟。
内容图文
![java – anagram检查的最佳解决方案?](/upload/InfoBanner/zyjiaocheng/746/7e7f9cc7546a49eab8d01a1406cf9cc7.jpg)
我正在经历一个排列/字谜问题,并希望输入最有效的检查方法.
现在,我正在Java土地上这样做,因此有一个包括排序在内的一切图书馆.
检查两个字符串是否是彼此的字谜的第一种方法是检查长度,以某种方式对它们进行排序,然后比较所述字符串的每个索引.代码如下:
private boolean validAnagram(String str, String pair) {
if(str.length() != pair.length()){
return false;
}
char[] strArr = str.toCharArray();
char[] pairArr = pair.toCharArray();
Arrays.sort(strArr);
str = new String(strArr);
Arrays.sort(pairArr);
pair = new String(pairArr);
for(int i = 0; i<str.length(); i++){
if(str.charAt(i) != pair.charAt(i)){
return false;
}
}
return true;
}
或者,我认为根据ascii值检查更容易,并避免检查每个可能的字符.代码如下:
private boolean validAnagram(String str, String pair) {
if(str.length() != pair.length()){
return false;
}
char[] strArr = str.toCharArray();
char[] pairArr = pair.toCharArray();
int strValue = 0;
int pairValue = 0;
for(int i =0; i < strArr.length; i++){
strValue+= (int) strArr[i];
pairValue+= (int) pairArr[i];
}
if(strValue != pairValue){
return false;
}
return true;
}
那么,这是一个更好的解决方案?我不太了解Arrays给我的那种,但是当我环顾旧的互联网时,这是更常见的答案.让我想知道我是否遗漏了什么.
解决方法:
有几种方法可以检查两个字符串是否是字谜.
你的问题是,哪一个是更好的解决方案.
您的第一个解决方案有排序逻辑
排序具有最坏的案例复杂度(nlogn).
你的第二个逻辑只使用一个具有复杂性的循环
上) .
所以在这两个中,你的第二个解决方案只有O(n)
复杂性将是比第一个更好的解决方案.
一种可能的方案:
private boolean checkAnagram(String stringOne , String stringTwo){
char[] first = stringOne.toLowerCase().toCharArray();
char[] second = stringTwo.toLowerCase().toCharArray();
// if length of strings is not same
if (first.length != second.length)
return false;
int[] counts = new int[26];
for (int i = 0; i < first.length; i++){
counts[first[i]-97]++;
counts[second[i]-97]--;
}
for (int i = 0; i<26; i++)
if (counts[i] != 0)
return false;
return true;
}
内容总结
以上是互联网集市为您收集整理的java – anagram检查的最佳解决方案?全部内容,希望文章能够帮你解决java – anagram检查的最佳解决方案?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。