返回问题

回帖的评论

前端大师傅:

这个很容易呀,在下有一个思路可以给楼上几位朋友扩展一下,和几位的思想完全不一样。

打个比方: 如果 A代表一个苹果,B代表两个苹果,C代表三个苹果,依次类推,那按楼主的说法如果

说字母的内容相同,只是顺序不同的话,那他们的和都是一样的。

即ABC,BCA,ACB他们的和肯定相同,而ACD,ACE,只有一个字母不同他们的和肯定不同。由这个原理我们可以这样来实现:

不好意思,上次答案给错了,修改了一下代码逻辑,正确的应该是把要比较的集合先按字符索引排序,下面是改的代码:

public bool CompareStrAB(string a, string b)
        {
            bool result = false;
            List<string> keys = null;
            List<char> aList = null, bList = null;
            try
            {
                keys = new List<string>("a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z".Split(','));
                //将字符串转为字符列表即"dsaf"=> {'d','s','a','f'};
                aList = new List<char>(a.ToArray());
                bList = new List<char>(b.ToArray());
                //将每个字母所在的索引值进行排序,这样在相同的排序下如果只是序错了就可以相等
                aList.Sort((aItem, bItem) => ((keys.IndexOf(string.Format("{0}", aItem)) < keys.IndexOf(string.Format("{0}", bItem)) ? -1 :
                (keys.IndexOf(string.Format("{0}", aItem)) > keys.IndexOf(string.Format("{0}", bItem)) ? 1 : 0))));
                bList.Sort((aItem, bItem) => ((keys.IndexOf(string.Format("{0}", aItem)) < keys.IndexOf(string.Format("{0}", bItem)) ? -1 :
                (keys.IndexOf(string.Format("{0}", aItem)) > keys.IndexOf(string.Format("{0}", bItem)) ? 1 : 0))));
                //如果两个字符串的索引和相等表明他们的字符值是相等只是有可能顺序不对
                result = string.Join("", (from v in aList select string.Format("{0}", v)).ToList().ToArray()) ==
                    string.Join("", (from v in bList select string.Format("{0}", v)).ToList().ToArray());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return result;
        }
文明上网,理性发言
客户端 Android iPhone WP7