字符串比较

时间:2022-06-14
本文章向大家介绍字符串比较,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

网上看到有人也说是他遇到的一道笔试题,那我想这道题目其实还考过很多人。只不过当时是给我笔让我写出来,一下子懵住了,没缓过神来。写的算法时间复杂度为O(n*m),而出题的要求是时间复杂度控制在O(n+m),而且内存和CPU要控制的很小。

已经快一年了,只记得题目的大意是:两个很多的字符串A、B(全部小写字母),请找出A中有,而B中没有的?

如果是用纸写出来,我想思考后也能写出来,而如果只是说(一般最多说一次,实在不理解最多再重复一次,还不能理解,别人可能会认为你理解和沟通上有障碍了)其实还挺考一个人的理解能力和反应能力。

记得我当时是提笔就写,得到的回答是问:是说还能不能继续优化?然后又改了改,同样又问,能不能继续优化。其实这道题并不难,重点是要理解出题的本意,找到最高效的方法,后来要想好后手机(最多140个字符)发给他。

题目有两个信息已经透露出来了:

1、对于比较字符串,尽量避免二次或以上的循环(消耗时间),出这道题希望给出的代码只有一次循环;

2、全部都是小定字母,而小写字母最多只有26个(a-z);

当时直接在手机上写的,代码也不见了,刚自己又写了一遍:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <title> new document </title>
  <meta name="generator" content="editplus" />
  <meta name="author" content="" />
  <meta name="keywords" content="" />
  <meta name="description" content="" />
  <meta http-equiv='content-type' content='text/html;charset=utf-8' />
 </head>

 <body>
  
<script type="text/javascript">
var s1 = new Array(60999*10).join('abcdefghijklmnopqrstuvwxyz'),
    s2 = '';

!(function() {
    var arr = [], i = 0, s = '';
    
    while (i < 26) {
        i++;
        s = String.fromCharCode(Math.random()*26 + 97);
        arr.push(s);
    }

    s2 = new Array(10000*10).join(arr.join(''));
})();

function getChar(str1, str2) {
    var arr = [],
        s = '';

    for (var i = 97;i < 123 ;i++ ) {
        s = String.fromCharCode(i);
        if (str1.indexOf(s) > -1 && str2.indexOf(s) == -1) {
            arr.push(s);
        }
    }

    return arr.join("");
}

var date1 = +new Date();
var rstStr = getChar(s1, s2);
var date2 = +new Date();

alert('Total Date:' + (date2 - date1) + 'n string is : ' + rstStr);
</script>

 </body>
</html>

在线运行代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title> new document </title> </head> <body> </body> </html> 预览代码