zoukankan      html  css  js  c++  java
  • [DOJ 练习] (取余优化) 判断一个字符串不区分大小写是否回文

    输入描述

    输入一个字符串,以#号结束,不包含空格,占一行

    输出描述

    判断字符串不区分大小写是否回文,是输出YES,否则输出NO。

    输入样例

    MadaDAm#

    输出样例

    YES

    写的时候在判断大小写上有了一些想法,可以省去一些步骤,根据的是大小写字母的ASCII码值差为32,所以我们不必像下面这样特意判断 ...他们各自究竟是大写还是小写,也不必判断字符串的大小为奇还是偶,否则遇到 abCba 这类的便会出问题...

    啰嗦且不完备的写法

            if((s[i]>='a' && s[i]<='z') || ){
    			if(s[len-1-i] != s[i]-32){
    				ret=1;
    				break;
    			}
    		}else if((s[i]>='A'&& s[i]<='Z')){
    			if(s[len-1-i] != s[i]+32){
    				ret=1;
    				break;
    			}
    		} 
    		else if(s[i] != s[len-1-i]){
    			ret=1;
    			break;
    		}

    思考了一下还是取余更为精妙(不必判断是大写还是小写,也不必判断自身是否在字符串的中心位置)

        if((s[i]>='a' && s[i]<='z') || (s[i]>='A'&& s[i]<='Z')){
            if((s[len-1-i]-s[i])%32){
                ret=1;
                break;
            }     
        }else if(s[i] != s[len-1-i]){
            ret=1;
            break;
        }

    代码如下:

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
    	char s[1000];
    	scanf("%s", s);
    	
    	int len = strlen(s)-1;
    	int ret = 0;
    	for(int i=0; i<=len/2; i++)
    	{
    		if((s[i]>='a' && s[i]<='z') || (s[i]>='A'&& s[i]<='Z')){
    			if((s[len-1-i]-s[i])%32){
    				ret=1;
    				break;
    			}
    		}else if(s[i] != s[len-1-i]){
    			ret=1;
    			break;
    		}
    	}
    	if(ret) printf("NO");
    	else printf("YES");
    	return 0;
    }

  • 相关阅读:
    hive同环比实现
    hive中的to_date和to_char
    正则表达式匹配一个独立的字符
    Mysql Explain用法详解
    hadoop安装踩坑
    hadoop ssh localhost无密码登录
    Node.js第十二篇:图片随机验证码
    Node.js第十一篇:Koa框架基础
    Ajax第五篇:JQuery中使用Ajax
    Ajax第四篇:跨域JSONP、CORS
  • 原文地址:https://www.cnblogs.com/Knight02/p/15799061.html
Copyright © 2011-2022 走看看