- 论坛徽章:
- 0
|
本帖最后由 afukada 于 2013-04-04 00:30 编辑
不知道思路上有沒有錯
還請大家指教一下
踩在前面一些方法之下
想法:
遍歷其中一個字串
另一個字串用最少的計算次數
先驗證str1字串長度等於str2字串長度
然後對每一個str1的字元做hash(%count)
然後用的s///g對於每個hash(%count)的$key來作取代並計算取代的次數
計算取代的次數是不是等於$count{$key}的value
如果hash(%count)的value等於1的時候
表示str1已經等於str2(因為剩下的字元的出現一次)
則表示str1 eq str2
如果在作取代的過程中發現有取代的次數不等於$count{$key}的value
則表示str1 ne str2
code如下:- $str1="abcda";
- $str2="adabc";
- $check=0;
- if(length($str1)==length($str2))
- {
- my @str1_s=split(//,$str1);
-
- for(@str1_s)
- {
- $count{$_}++;
- $check++ if($count{$_}>=2);
- }
-
- if($check==0)
- {
- print $str1,"=",$str2,"\n";
- }
- else
- {
- $check=0;
-
- foreach(sort{$count{$a}<=>$count{$b}}keys($count))
- {
- if($count{$_}>1)
- {
- print $str1,"!=",$str2,"\n" if($count{$_}!=($str2=~s/$_//g));
- }
- else
- {
- print $str1,"=",$str2,"\n" if($check==0);
- last;
- }
- }
- }
- }
- print $str1,"==",$str2,"\n" if($check==0);
复制代码 如果code有問題請告訴我
這個方法我目前想到的問題
1.字串太短等於做了很多多餘的事
2.應該要設一個字串長度以上在做這個驗證
3.排序我是依據所需要的element來做設計,我的想法是越少的element越快
不知道大家有什麼意見
還請大家指教
獻醜了<(_._)> |
|