美文网首页
判断字符串是否是回文.c

判断字符串是否是回文.c

作者: archersx | 来源:发表于2017-01-17 18:02 被阅读0次

一次面试引起的思考

在一次面试中曾被问到这样一个问题,如何判断字符串是否是回文,要求写一个函数,语言不限。我当时一听心中一阵窃喜,js的数组中不正好有一个reverse函数吗?这不正好可以用于解这道题吗?于是乎我很快就写了含有str.split('').reverse().join('')这样的代码。面试官面带疑惑的问我这么快就写完了?在看了我的代码之后,笑着说:“那我要是让你写一个排序,你是不是要用sort这个方法呢?”,当时就有点不好意思了。对啊,面试官估计不是想考我是否知道有这样的方法。所以我赶紧重新写了一个思路也很简单的,大概是在函数中新建了一个array,然后按照从尾到头的顺序依次push原字符串split之后的结果中的每一项,最后再用array.join的方法产生了新的字符串,将新旧字符串进行===比较之后可得结论。给面试官看了之后也没说什么,只是告诉我说如果用指针的话会很简单。

可是JavaScript中似乎没有指针的用法

面试最终宣告失败。可是我还是对面试官所说的“用指针的方法会很简单”这句话念念不忘。在网上搜索了一下,好像js确实与c中指针的用法关系不大,只好作罢,然后我在网上想看看reverse函数是怎么实现的,看到有的答案是这样的:

function reverse(arr){
    for(var i = 0;i < arr.length/2; i++){
       var temp = arr[i];    //替换数组中相对称的两项
       arr[i] = arr[arr.length - i - 1];
       arr[arr.length-i-1] = temp;
    }
 }

上面的代码看起来很简单,但又和我们常见的想法有一点差异。常见的想法如上文所写的那样需要创建一个新的数组来将存储原数组处理后的结果然后再做比较。可是上面这段代码却直接观察数组中的对应项颠倒的规律(将第i项和第(arr.length-i-1)项交换位置)。当然,这只是一个参数为数组的reverse函数,如果要想应用于解决字符串是否是回文的问题还需要做一点修改。

这一次用c的写法

恰好前不久老师讲了js如何判断字符串是否为回文的问题,同时又想知道面试官的那句话到底是什么意思。我还是去看了看C语言的指针部分那一小节,但是想了好久对于那一小节中的左值和右值的概念还是不太清楚,然后恰好这一节有翻转字符串的一个参考代码,如下:

void reverse_string( char * str)
{
    char * last_char;
    for(last_char = str; *last_char != '\0'; last_char++)
        ;
    last_char--;//因为C语言中系统对字符串常量自动加一个'\0'作为结束符,所以循环结束后last_char指向的是作为终止符的字节,所以这里做了--处理。
    while( str < last_char){
        char temp;
        temp = *str;
        *str++ = *last_char;
        *last_char-- = temp; 
    }
}

由于我对c中字符串还不太熟悉,上面的代码具体怎么使用还不得而知。(比如c中一个字符串常量出现在表达式当中时,表达式所使用的值是这些字符串存储的地址而不是这些字符串本身,所以还不太清楚如何去比较两个字符串是否相等。QAQ。

总结

你可以把这篇短文看作我不务正业的结果,我只是真的想去看看面试官所说的会指针的话就简单多了是有多简单。之前看到《JavaScript语言精粹》一书中说“JavaScript是披着C外衣的Lisp”,第一眼感觉js应该和c比较像吧,可是终究还是不明白这句话的意思。而且忠告大家,在js还没学透彻的时候去看其他语言可能有副作用。。。就像我现在好像对js感到陌生了一样。以后还是继续研究js吧。

文章著作权归Archer和饥人谷所有,转载需说明来源

相关文章

  • 字符串面试题总结

    规则判断 判断字符串是否符合整数规则 判断字符串是否符合浮点数规则 判断字符串是否符合回文字符串规则 数字运算in...

  • C# 判断字符串是否是回文字符串(单链表)

    回文字符串: ABCDCBA ABCDDCBA 两种都属于回文字符串; 如何判断一个字符串是否是否回文: 使用快慢...

  • 判断字符串是否是回文.c

    一次面试引起的思考 在一次面试中曾被问到这样一个问题,如何判断字符串是否是回文,要求写一个函数,语言不限。我当时一...

  • 最长回文子串

    判断是否是回文字符串 获取所有可能子串 获取所有回文子串 进阶

  • 剑指 Offer II 020. 回文子字符串的个数

    有点滑动窗口的意思。。valid判断是否是回文字符串

  • 035-判断一个字符串是否是回文

    描述 判断一个由字母、数字和空格组成的字符串是否是回文。 约束: ​ 空字符串为回文; 示例: ​ ...

  • 算法---回文判断

    给定一个字符串,判断其是否是回文

  • 字符串问题合集

    1. 验证回文串 题目描述: 输入一个字符串,只关注字母和数字,判断字符串是否为回文串。空字符串也可以认为是回文串...

  • 字符串进阶

    1.反转字符串 2.字符串包含问题 3.字符串转数字 4.判断是否为回文判断一条单向链表是不是“回文” 分析:对于...

  • 判断给定字符串是否为回文串

    题目:判断规定字符串是否为回文串。 首先我们应该理解什么是回文串。回文串就是从正面读和反面读是一样的字符串,比如l...

网友评论

      本文标题:判断字符串是否是回文.c

      本文链接:https://www.haomeiwen.com/subject/ioambttx.html