记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串。我当时用了几分钟写了一个很简单的代码。

这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abba",单个字符串暂且算非对称字符串,虽然有字符串看起来是对称的如"A、"H"、"O"、"中"、"人"...,严格来说,也是不对称的,把它们放大时,线条的粗细是不一样的。

static bool IsSymmetry1(string str)
{
if (string.IsNullOrEmpty(str) || str.Length == )
{
return false;
}
for (int i = ; i < str.Length / ; i++)
{
if (str[i] != str[str.Length - - i])
{
return false;
}
}
return true;
}

这个很简单,最多遍历字符串长度的一半次数,对比第一个跟倒数第一个,第二个跟倒数第二个...

功能是实现了,但给人的感觉是太简单,效率也不高。既然是算法,那就得效率高。

我跟朋友讨论了下,朋友给了另一个方案

static bool IsSymmetry2(string str)
{
if (string.IsNullOrEmpty(str) || str.Length == )
{
return false;
}
var halfLength = str.Length/;
var str1 = str.Substring(, halfLength);
var str2 = new String(str.Substring(str.Length% == ? halfLength : halfLength + , halfLength).Reverse().ToArray());
return str1.Equals(str2);
}

这个方案就是将字符串拆成两半,将后一半反转跟前一半比较。

效果也能实现,没用遍历,看起来比上个方案要高大上,实际运行效率更低。

这两种方案只是入门级别的,肯定还有更好,更高效率的写法,请求各位大神分享.谢谢!

如果觉得对你有帮助,请点个赞,谢谢!

不足与错误之处,敬请批评指正!

C#算法之判断一个字符串是否是对称字符串的更多相关文章

  1. js 算法,判断一个数组中的数字出现多少次

    let arr = [11, 11, 2, 2, 5, 5, 5, 5, 3]; //创建一个map,把每个数字和其个数相对应 let countObj = {}; for (i = 0; i < ...

  2. [算法]Python判断一个点是否在多边形内部

    题目: 代码: # -*- coding:utf-8 -*- def rayCasting(p, poly): px = p['x'] py = p['y'] flag = False i = 0 l ...

  3. Java基础知识强化46:StringBuffer类之判断一个字符串是否对称案例

    1. 分析:判断一个字符串是否是一个对称的字符串,我们只需要把字符串的第1个字符和最后1个字符,第2个字符和倒数第2个字符,…… 比较的次数是长度除以2.  方法1:通过取取索引对应值来进行一一比对 ...

  4. PNPoly算法代码例子,判断一个点是否在多边形里面

    写C语言的实验用到的一个算法,判断一个点是否在多边形的内部.C的代码如下: int pnpoly(int nvert, float *vertx, float *verty, float testx, ...

  5. AJPFX实列判断一个字符串是不是对称字符串

    import java.util.Scanner; /** *        判断一个字符串是否是对称字符串 */ public class StringDemo { public static vo ...

  6. 判断一个字符串中是否包含另一个字符串(KMP、BF)

    判断一个字符串是否是另一个字符串的子串,也就是strstr()函数的实现,简单的实现方法是BF算法. 1.BF算法 int BF(char *s, char *p){ ; ; int j; while ...

  7. 判断一个字符串是不是一个合法的IP地址

    最近在笔试的时候遇到碰一道算法题, 要求判断一个字符串是不是合法的ip地址. 将我的思路发出来分享一下,不一定正确,也不一定是最优的方法.希望能分享一些交流 要求用java或者c来实现,我的java代 ...

  8. 算法 - 给出一个字符串str,输出包含两个字符串str的最短字符串,如str为abca时,输出则为abcabca

    今天碰到一个算法题觉得比较有意思,研究后自己实现了出来,代码比较简单,如发现什么问题请指正.思路和代码如下: 基本思路:从左开始取str的最大子字符串,判断子字符串是否为str的后缀,如果是则返回st ...

  9. 算法之暴力破解和kmp算法 判断A字符串是否包含B字符串

    我们都知道java中有封装好的方法,用来比较A字符串是否包含B字符串 如下代码,contains,用法是 str1.contains(str2), 这个布尔型返回,存在返回true,不存在返回fals ...

随机推荐

  1. APS-C画幅与全画幅

    本次对比将通过视角.景深.暗角.细节等几个方面来展现APS-C画幅与全画幅的差别.希望这篇帖子中的一些说明,能对一些纠结在APS-C画幅 与全画幅之间的朋友有所帮助与参考. 同等焦距下APS-C画幅与 ...

  2. 菜单栏被flex页面遮挡解决办法

  3. centos7 firewall 防火墙

    在部署dubbo-monitor 和dubbo-admin zookeeper时候,外部访问不了部署好的服务,因为端口问题 ,现在把端口操作总结一下 参考: http://www.cnblogs.co ...

  4. 关于print和echo的区别

    我的想法是print是函数,echo是语句.有一个点很难去说明就是为什么可以执行print 666.可以这样不加括号,象print(666);至于为什么一定要认为print是函数,而非网上说的语句和函 ...

  5. 【javascript 进阶】异步调用

    前言 javascript的中的异步是很重要的概念,特别是ajax的提出,给整个web带来了很大的影响,今天就介绍下javascript的异步编程. 同步与异步 何为同步?何为异步呢? 同步:说白了就 ...

  6. oleDB 导入excel遇到的问题

    本地测试一切ok. 到服务器上测试各种报错,先装了office2010,又装了AccessDatabaseEngine,之后报"Microsoft Excel 不能访问文件 可能的原因有: ...

  7. ubuntu 13.10 svn工具 rabbitvcs 安装

    ubuntu 版本:13.10:桌面模式默认:unity :文件管理器:nautilus

  8. SpingMVC ModelAndView, Model,Control以及参数传递

    1.web.xml 配置: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class& ...

  9. backprop示例

    http://home.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

  10. 原生态ajax 传递json参数到服务器端

    案例说明:通过ajax将用户名和密码以json形式传递给服务器端,然后服务器端接受数据,进行处理返回json数据到前端 首先,在客户端,通过JavaScript脚本将页面表单数据封装成JSON格式.L ...