问题描述
如何判断一个字符串数组中是否存在两个字符串序列相等?不要用时间复杂度为O(n2)的算法,请问具体要怎么做?
解决方案
解决方案二:
publicbooleancompareEqual(String[]strs){booleanflag=false;//字符串数组中是否有两个字符串相等Stringtemp="";for(inti=0;i<strs.length;i++){if(temp.contains(strs[i])){flag=true;break;//若果有重复就直接跳出循环}temp+=strs[i];//将已经比较过的拼接成字符串}returnflag;}
楼主看这样子复合你要求不,设一字符串temp用来存放字符串数组中已经比较了的字符串,遍历取出字符串数据中的元素来和temp字符串做比较看是否该元素是否已经被temp字符串包含
解决方案三:
引用1楼aaron_gzt的回复:
publicbooleancompareEqual(String[]strs){booleanflag=false;//字符串数组中是否有两个字符串相等Stringtemp="";for(inti=0;i<strs.length;i++){if(temp.contains(strs[i])){flag=true;break;//若果有重复就直接跳出循环}temp+=strs[i];//将已经比较过的拼接成字符串}returnflag;}楼主看这样子复合你要求不,设一字符串temp用来存放字符串数组中已经比较了的字符串,遍历取出字符串数据中的元素来和temp字符串做比较看是否该元素是否已经被temp字符串包含
想法蛮好的,不过不符合要求吧比如{"a","b","ab"};这个按你的算法就相等了
解决方案四:
引用2楼whos2002110的回复:
Quote: 引用1楼aaron_gzt的回复:
publicbooleancompareEqual(String[]strs){booleanflag=false;//字符串数组中是否有两个字符串相等Stringtemp="";for(inti=0;i<strs.length;i++){if(temp.contains(strs[i])){flag=true;break;//若果有重复就直接跳出循环}temp+=strs[i];//将已经比较过的拼接成字符串}returnflag;}楼主看这样子复合你要求不,设一字符串temp用来存放字符串数组中已经比较了的字符串,遍历取出字符串数据中的元素来和temp字符串做比较看是否该元素是否已经被temp字符串包含
想法蛮好的,不过不符合要求吧比如{"a","b","ab"};这个按你的算法就相等了
你说的也对,的确考虑漏了。如果数组中的元素不包含符号的话,可以试一下这样来做的:publicbooleancompareEqual(String[]strs){booleanflag=false;//字符串数组中是否有两个字符串相等Stringtemp="";for(inti=0;i<strs.length;i++){if(temp.contains(strs[i]+",")){flag=true;break;//若果有重复就直接跳出循环}temp+=strs[i]+",";//将已经比较过的拼接成字符串}returnflag;}
不过如果数组中的元素包含符号的话就需要自己设计一个特别的分隔符才行了