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

这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"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. Linux centos 下 安装eclipse c++

    之前在centos6.3版本使用eclipes一切都很正常.最近centos版本升级到6.7后,使用eclipse c++到时候,打开文件,就异常退出了.在网上搜了很久,终于找到解决方法: 现象描述: ...

  2. [git]问题list

    1. fast-forward和non fast-forward分别代表什么概念? 2. 在git中文件index是个什么概念? 3. stage/index/cache三者有什么关系? 4. git ...

  3. 免费SVN空间

    推荐免费的svn空间(SVN代码托管) 最近研究了国内和国外的免费svn空间,SVN代码托管,SVN在线,代码托管中心,有所心得. 1.http://www.svn999.com/ [推荐]国内的,免 ...

  4. MySQL绿色版的安装(mysql-5.6.22-win32.zip)

    1.数据库下载 Mysql官方网站:http://www.mysql.com/,数据库下载地址:http://www.mysql.com/downloads/.从官方网站可以找到两种文件包,一种是ex ...

  5. php 升级排错

    lnmp 环境下,升级php版本,模块都加载完成,数据库,nginx 设置都完好,但php 只能用ip 访问数据库,不能用localhost,处理要设置php.ini 的三个mysqld.sock,还 ...

  6. i2c 读写

    在I2C设备读取,必须是在同一个周期内. 一个例子,可以同时读出两个值 int read_register_double_value(int reg_addr, unsigned char *valu ...

  7. [转]Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications

    This article is from blog of Amazon CTO Werner Vogels. -------------------- Today is a very exciting ...

  8. 新做的一个基于OPENGL的gui库

    #include <BGE/All> ,text);     button->setName(name);     button->setSize(Vector2f(,)); ...

  9. linux基础1——网络配置入门

    1.IP地址配置 (1)临时IP更改 sudo ifconfig eth0 down    暂停接口 sudo ifconfig eth0 192.168.1.xx sudo ifconfig eth ...

  10. Oracle 11.2.4.0 ACTIVE DATAGUARD 单实例安装(COPY创建备库)

    Oracle 11.2.4.0 ADG 单实例安装(COPY创建备库) 规划: 主: OS: Linux Centos 6.5 X64 hostname:ORA11G-DG1 ipaddress:19 ...