牛客网---2016---蘑菇街回文串

来源:互联网 发布:淘宝宝贝详情怎么做 编辑:程序博客网 时间:2024/04/30 20:10

到家就不想运动,也是没谁了。。。

这里写图片描述

题目:
给定一个字符串,问是否能通过添加一个字母将其变为回文串。
输入:
一行一个由小写字母构成的字符串,字符串长度小于等于10。

coco

输出:
输出答案(YES\NO).

YES

解析:
1 . 个人理解嘛,大概能就是先找到对称点,找到所谓的对称方式,当字符串大小为奇数时,对称方式有两种;当字符串大小为偶数时,对称方式有三种,仔细想一想就知道了。
2 . 所以呢,就这样,这个题目变成了两种情况,进而讨论五种类型。看了大神的答案感觉自己好low。。。能加就能减,既然能通过增加一个字符变成回文串,那一定也可以通过删除一个字符变成回文串。用一个循环,每次循环依次删掉一个字符,然后检查新串是否是回文串,看起来简单方便许多。
3 . 话说不放在eclipse上面运行就是不知道自己哪里出问题了。。。
解题所需函数:
1 . 字符串和字符串数组之间的相互转换

// 转化成为字符串数组String str = scan.nextLine();char[] chas = str.toCharArray();// 字符串数组转化为字符串String s = String.valueOf(chas)

2 . 删掉字符串中的某一项数据

char[] chas = str.toCharArray();// 将转化成字符串数组的东东的某一项变为空格chas[i] = ' ';// 转换成字符串然后搞一波替换String s = String.valueOf(chas).replaceAll(" ", "");

3 . 复制字符串

// 记住是Stirng中的copyValueOf即可String str1 = String.copyValueOf(chas);

4 . 简单判断是否是回文串方法

// 判断一个字符串是否是回文串public static boolean isHuiwen(String s){    // 操作分别为 字符串变量s,对字符串变量翻转,转化为String,判断是否相等    return new StringBuilder(s).reverse().toString().equals(s);}// new StringBuffer(str).reverse().toString();最简单的字符串翻转方法,记住就好

String, StringBuffer, StringBuilder的异同,啧啧,貌似很厉害的样子,有时间滚去看看的哟
代码:

import java.util.Scanner;import java.util.*;public class Main{    // 主函数 没毛病    public static void main(String[] args){        // 创建Scanner        Scanner scan = new Scanner(System.in);        // while循环获取数据        while(scan.hasNext()){            // 获取一整行数据            String str = scan.nextLine();            // 处理字符串,需要将字符串转化成字符串数组            char[] chas = str.toCharArray();            // 用于判断是否可以满足题目条件,默认不能满足            boolean flag = false;            // 遍历所有字符串数据,然后进行减操作            for(int i=0; i<chas.length; i++){                // 复制操作                String str1 = String.copyValueOf(chas);                // 将复制体转化成字符串数组                char[] chas1 = str1.toCharArray();                // 接下来是重头戏,如何删除某一项数据,其实很简单,变成空格然后搞替换就好了                chas1[i] = ' ';                // 转换成字符串然后搞一波替换                String s = String.valueOf(chas1).replaceAll(" ", "");                if(isHuiwen(s)){                    flag = true;                }            }            if(flag){                System.out.println("YES");            }else{                System.out.println("NO");            }        }        scan.close();    }    // 判断一个字符串是否是回文串    public static boolean isHuiwen(String s){        return new StringBuilder(s).reverse().toString().equals(s);    }}