【全排列】亚马逊在线测试-找下一个回文字符串
2014-10-09 18:19
323 查看
给定字符串s[len],求下一个回文字符串
例如
123 =》 131
321 =》 323
121 =》 131
191 =》 202
999 =》 1001
也就是从i=0到(len-1)/2扫描,
如果a[j=len-1-i]不等于a[i],则令a[j]=a[i],如果a[j]变大,说明当前串变大。否则,当前串变小。
扫描到头检查当前串是变大还是变小还是没变。
如果变大,则直接返回。
否则,令a[i=(len-1)/2]和a[j=len-1-i]自增。如果增加后溢出,则置为0,向外(从中間向两边)进位。
需要注意,当进位进到超过a[0]时,说明当前串长度需要变化(+1),并变成100....01的形式。
例如
123 =》 131
321 =》 323
121 =》 131
191 =》 202
999 =》 1001
也就是从i=0到(len-1)/2扫描,
如果a[j=len-1-i]不等于a[i],则令a[j]=a[i],如果a[j]变大,说明当前串变大。否则,当前串变小。
扫描到头检查当前串是变大还是变小还是没变。
如果变大,则直接返回。
否则,令a[i=(len-1)/2]和a[j=len-1-i]自增。如果增加后溢出,则置为0,向外(从中間向两边)进位。
需要注意,当进位进到超过a[0]时,说明当前串长度需要变化(+1),并变成100....01的形式。
/* * Complete the function below. */ #include <iostream> using namespace std; string getNextSymmetricNumber(string n) { int len=n.length(); bool bigger=false; for(int i=0;i<=(len-1)/2;i++){ int j=len-i-1; if(n[i]!=n[j]) { if(n[i]<n[j]){ n[j]=n[i]; bigger=false; } else{ n[j]=n[i]; bigger=true; } } } if(bigger) return n; for(int i=(len-1)/2;i>=0;i--){ n[i]=++n[len-1-i]; if(n[i]>'9'){ n[i]=n[len-1-i]='0'; } else break; } if(n[0]=='0'){//最高位发生进位 string t="1"; for(int i=0;i<len-1;i++) t+='0'; t+='1'; return t; } return n; } int main(){ string s;//="130"; cin>>s; cout<<getNextSymmetricNumber(s)<<endl; return 0; }
相关文章推荐
- POJ 1146 求字符串的下一个排列
- [ACM] poj 1146 ID Codes(字符串的下一个排列)
- 回文字符串的测试
- [ACM] poj 1146 ID Codes(字符串的下一个排列)
- 测试一个c风格字符串是否是回文字符串
- 获取输入字符串的下一个字典序排列
- 2017腾讯-暑期实习生在线测试-16进制字符串转换
- [ACM] poj 1146 ID Codes(字符串的下一个排列)
- 亚马逊 在线测试题目 amazon (变种的)三叉树的最近公共祖先问题
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- 亚马逊 在线测试题目 amazon
- [2016 微软预科生计划-探星夏令营在线测试2] Give My Text Back(字符串处理)
- 2014年亚马逊在线笔试题目及解法_9_24(字符串编辑距离升级版)
- poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )
- 字符串的下一个排列
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- 如何测试字符串的长度?
- 显示字符串中所有字符的排列组合。
- [CodeProject每日一荐] 基于xml的在线选择题小测试(调查问卷)
- 使用XML的DOM和XPath来创建多项选择题的在线测试