字符串添加一个字母将其变为回文串
来源:互联网 发布:天书世界圣物突破数据 编辑:程序博客网 时间:2024/05/17 03:29
题目描述
给定一个字符串,问是否能通过添加一个字母将其变为回文串。
输入描述:
一行一个由小写字母构成的字符串,字符串长度小于等于10。
输出描述:
输出答案(YES\NO).
输入例子:
coco
输出例子:
YES
问题分析:首先缺了一个字符的回文串是怎样的
1、在头部、尾部缺 如 abcb(在尾部缺) bdffdbe(在头部缺)
------这种类型只要把首部、或者尾部的一个字符串去掉,那天还是一个回文字符串
2、在中间部分缺 如: abcdrfcrdcbae这种情况,只要把首尾相同的字符去掉,就又会出现 1 的这种情况 abcdrfcrdcba————————>fc
abcdrfcrbae------->cdrfcr
3、还有一种情况就是在最中间缺,这种情况,就算他缺了一个字符,它还是一个回文字符串 如: aba abba
public class main7 { public static void main(String args[]) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){String input=sc.next();doIt(input);}} public static void doIt(String input){ int i=0,j=input.length()-1; while(i<j&&input.charAt(i)==input.charAt(j)){ i++;j--; }; //把首尾相同的元素去掉 // System.out.println(i+" "+ j); if(i>=j) { //这就是中间缺的情况 System.out.println("YES"); return; } else{ if(input.charAt(i+1)==input.charAt(j)){ i++; while(i<j&&input.charAt(i)==input.charAt(j)){ i++;j--; }; //把首尾相同的元素去掉 if(i>=j) { //这就是中间缺的情况 System.out.println("YES");return; } } if(input.charAt(i)==input.charAt(j-1)){ j--; while(i<j&&input.charAt(i)==input.charAt(j)){ i++;j--; }; //把首尾相同的元素去掉 if(i>=j) { //这就是中间缺的情况 System.out.println("YES");return; } } } System.out.println("NO"); }
代码很贵一斤,可以换成递归实现减少代码
public static void main(String args[]) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){String input=sc.next();boolean b = doIt02(input,0,input.length()-1,1);System.out.println(b?true:false);}} public static boolean doIt02(String input,int start,int end ,int deep){ if(start>=end){ return true; } if(input.charAt(start)==input.charAt(end)){return doIt02(input,start+1,end-1,deep); } else{ if(deep==1){ return doIt02(input,start+1,end,deep+1)||doIt02(input,start,end-1,deep+1); } return false; } }
0 0
- 字符串添加一个字母将其变为回文串
- 给定一个字符串,问是否能通过添加一个字母将其变为回文串。
- 面试题:给定一个字符串,问是否能通过添加一个字母将其变为回文串
- 给定一个字符串,问是否能通过添加一个字母将其变为回文串。js实现
- 判断是否能通过添加一个字母将字符串变为回文串
- 给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”
- 动态规划题:把一个字符串变为回文串
- 将一个字符串的字符变为其前一个的字符
- DP问题---添加字符把字符串变为回文字符串
- 将字符串中的每一个字母变成其下一个字母
- 通过最长公共子串求得使得一个串变为回文串的最少添加字符
- 输入一个字符串,如果第二个字符是字母(a~z ,A~Z),则将其大写变小写,小写变大写,如果不是字母则将其修改为空格,并将修改后的字符串输出。
- c++入门:输入一个字符串,将其分段输出,分段符为除字母和数字之外的符号。
- 输入一个字符串,将其分段输出,分段符为除字母和数字之外的符号。
- 变为回文串
- [Hash]变为回文串
- 请编写一个函数fun(char *s),其功能是:将s所指字符串中所有的字母改写成该字母的下一个字母,若是z字母,则改为a字母,大、小写保持不变。
- 将一个字符串倒序,如“abcd”倒序后变为“dcba”
- 微信小程序把玩(五)页面生命周期
- PHP 学习笔记(二):表单:表单处理,表单验证,表单实例
- HTTP 415问题
- Centos7中安装caffe
- Java集合框架
- 字符串添加一个字母将其变为回文串
- Zend framework 2.x框架搭建
- Codeforces Round #373 (Div. 2) A(细节题) && B(思维题)
- Android实现点击通知栏后,先启动应用再打开目标Activity
- 子类重写父类的方法应注意的问题
- cordova和ionic安装总结
- 组合数
- CVPR 2016-9-22
- CSS技术