【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
前两天接触了这么一道有趣的题目:
String org1=“arm”; String org2="ram"; return true;
String org3="des"; String org4="dec"; return false;
要求,写一个代码片段,实现对字符串同位异序的判断。(传入的字符串需统一转换为小写)
我的思路是:判断第二个参数的每一个字符是否在第一个参数中,代码如下。
public static boolean compareArg(String a,String b){ if(a.length()!=b.length()){ return false; } a=a.toLowerCase(); b=b.toLowerCase(); int temp=0; for(int j=0;j<b.length();j++){ String c=b.substring(j,j+1); if(a.contains(b.substring(j,j+1))){ temp=temp+1; } } if(a.length()==temp){ return true; } return false; }
感觉这样写有点简陋。想请教下大家有没有更好的比较方法。还有,如果这是道面试题的话,主要会考察面试者的什么呢?
你的temp没啥意义...还不如没有时直接return false;
还有一种方式,叫逻辑简单,但代码上比较长.
1.先将两个字符串排序.
2.最后一个一个对应着比较.
你没考虑重复的情况,略改了下
根据各位大佬的回复,对上述代码做了修正:
还是不如四楼老兄给出的方法简洁╭(╯^╰)╮,下面有另外一种思路:
这个很容易呀,在下有一个思路可以给楼上几位朋友扩展一下,和几位的思想完全不一样。
打个比方: 如果 A代表一个苹果,B代表两个苹果,C代表三个苹果,依次类推,那按楼主的说法如果
说字母的内容相同,只是顺序不同的话,那他们的和都是一样的。
即ABC,BCA,ACB他们的和肯定相同,而ACD,ACE,只有一个字母不同他们的和肯定不同。由这个原理我们可以这样来实现:
不好意思,上次答案给错了,修改了一下代码逻辑,正确的应该是把要比较的集合先按字符索引排序,下面是改的代码:
双排序的思路简单,复杂度略高
if(List1.size()!=List2.size) return false;
else 是否可以采取打点的方式,遍历List2,判断每个元素在List中的位置,如果有则标记该位置(以使其不再被命中)
如果没有,则立即返回false