算法求教,ACM 题目指导

问题描述

题目:要求对任意一个字符串,通过加入若干字符使其对称如abcda至少要插入两个字符,两个一下无法使其对称abdcdba,adbcdba请求出需要插入的最少字符数希望大家能给我出出主意,给点解决这个题目的思路!感激

解决方案

public static int symmetry(String source) {int length = source.length();int count = 0;int compareIndex = length - 1;for(int i = 0; i <= compareIndex; i++) {char c = source.charAt(i);char end = source.charAt(compareIndex);if(c == end) {compareIndex--;continue;} else {count++;}}return count;}循环的地方改成:for(int i = 0; i <= compareIndex; i++) 就可以满足了
解决方案二:
public static int symmetry(String source) {StringBuffer target = new StringBuffer(source);int length = source.length();int count = 0;int compareIndex = length - 1;for(int i = 0; i <= compareIndex; i++) {char c = source.charAt(i);char end = source.charAt(compareIndex);if(c == end) {compareIndex--;continue;} else {count++;target.insert(compareIndex + 1, c);}}System.out.println(target.toString());return count;}
解决方案三:
提示:定义一个计数的number=0。然后一定是进行首尾比较。做两个下标变量i,j.首是:i=0,尾是:j=n.如果相等;i++,j--,判断条件是j>i如果不等.i++,number++,j不变.最终number应该就是最少字符数了吧.
解决方案四:
public static int symmetry(String source) {int length = source.length();int count = 0;int compareIndex = length - 1;for(int i = 0; i < length; i++) {char c = source.charAt(i);char end = source.charAt(compareIndex);if(c == end) {compareIndex--;continue;} else {count++;}}return count;}测试了一下,觉得有些小问题,就是判断个数是否为奇数,如果奇数,count--。这个思路不对,应该去掉,并且用新的办法重新计算,等中午有空,再改造下
解决方案五:
public static int symmetry(String source) {int length = source.length();int count = 0;int compareIndex = length - 1;for(int i = 0; i < length; i++) {char c = source.charAt(i);char end = source.charAt(compareIndex);if(c == end) {compareIndex--;continue;} else {count++;}}if(count % 2 == 1) {count--;}return count;}粗略的写了个,你测试下,与你的目标算法可有出入。我测试几个,基本上是正确的。
解决方案六:
我的理解是递归做abcda1、首先判断第一个和最后一个是否一样 2、如果不一样 分两种情况 --> 最前 最后 插入字符 然后再递归(带上当前的插入的数量) 找下去 找到最后即可 这样就找到每种情况 3、优化 可以把找完的存到一个位置 然后其他递归每次找时和之前找到的进行匹配 如果大于就提前终止 不再找了
解决方案七:
这个问题灰常简单:我们不知道该字符串的对称序号位于字符串的第几个字符,也就没有办法从中间字符一次对比来增加字符,换个思路,我们可以从开头和末尾来对比,倒数第一正数第一相同,依次对比倒数第二个和正数第二个;倒数第一正数第一不同则在开头或者末尾增加字符,然后再对比倒数第二个正数第二个......

时间: 2024-09-22 01:07:13

算法求教,ACM 题目指导的相关文章

求解acm题目,一直时间超限,求更优的算法

问题描述 求解acm题目,一直时间超限,求更优的算法 #include<cstdio> #include<cstring> int v[10000]; int a[10000]; int s; int check(int k) { for(int i=0;i<s;i++) if(k == a[i]) return 0; return 1; } void dfs(int t,int n,int k) { if(n==0){ if(check(k)){ a[s++] = k; /

ACM题目中输入数据的处理(C++版)

ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794 ACM竞赛题目的输入数据常要求有多组,并且格式多种多样,这是初次登OJ平台的同学的一个障碍.实际上,这些格式可以归为固定的几种类型,本文介绍各种类型的处理方法,以帮助同学们克服这些障碍. 实际上,这些模式不仅是OJ平台上做题的需要.在平时的自由编程练习中,也可以自行使用这些模式,以提高调试程序的效率.对程序测试的意识也将在此过程中得到提升. 本

ACM题目中输入数据的处理(C语言版)

ACM题目中输入数据的处理(C++版),见:http://blog.csdn.net/sxhelijian/article/details/8978850 ACM竞赛题目的输入数据常要求有多组,并且格式多种多样,这是初次登OJ平台的同学的一个障碍.实际上,这些格式可以归为固定的几种类型,本文介绍各种类型的处理方法,以帮助同学们克服这些障碍. 实际上,这些模式不仅是OJ平台上做题的需要.在平时的自由编程练习中,也可以自行使用这些模式,以提高调试程序的效率.对程序测试的意识也将在此过程中得到提升.

问一道acm题目,下楼梯递归的

问题描述 问一道acm题目,下楼梯递归的 下楼梯查看 提交 统计 提问总时间限制: 1000ms 内存限制: 1000kB描述从楼上走到楼下共有h个台阶,每一步有3种走法:走1个台阶,走2个台阶,走3个台阶.问可走出多少种方案,并打印出具体方案?输入台阶个数h输出各种走法方案及总方案个数样例输入5样例输出plan 1:32plan 2:311plan 3:23plan 4:221plan 5:212plan 6:2111plan 7:131plan 8:122plan 9:1211plan 10

问一道开关电灯的acm题目

问题描述 问一道开关电灯的acm题目 开关电灯查看 提交 统计 提问总时间限制: 1000ms 内存限制: 65536kB描述N盏灯排成一排,从1到N依次编号.有N个人也同样编号.第一个人将灯全部熄灭:第2个人将对应2和2的倍数的灯打开:第3个人将对应着3和3的倍数的灯做反向操作(如果原来是开,则关掉它,否则就打开它):以后的人和3做同样的操作,即第i个人将对应着i和i的倍数的灯做反向操作.输入灯的总数N 1<=N<=1000输出在第N个人操作后,顺序输出还亮着灯的编号.样例输入8样例输出2

编程-ACM题目 求思路 枚举超时·

问题描述 ACM题目 求思路 枚举超时· 解决方案 #include<iostream> using namespace std; long pow(int a,int b){ if(b==0) return 1; return a*pow(a,b-1); } int main(){ long x,y; int countinput=0; while(cin>>x>>y){ countinput++; int count=0; int countsame=0; for(

c语言顺序表-菜鸟求救,这个程序,做ACM题目时两个pass,三个错了,提示是unknown error。。。

问题描述 菜鸟求救,这个程序,做ACM题目时两个pass,三个错了,提示是unknown error... #include #include #include #define MAXSIZE 1000 static int h[MAXSIZE]; int k = 0, x=0; typedef int datatype; typedef struct { datatype a[MAXSIZE]; int size; }seq_list; void init(seq_list *L) { L->

acm icpc-一个acm题目问下,应该不会很难,但是么做出来

问题描述 一个acm题目问下,应该不会很难,但是么做出来 发票统计 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个小型的报账系统,它有如下功能: (1)统计每个人所报发票的总钱数 (2)统计每类发票的总钱数 将此系统简化为如下:假设发票类别共有A.B.C三种;一共有三个人,ID分别为1.2.3. 输入 系统输入包含三行,每行第一个数为人员ID(整型,1或2或3),第二个数为发票总张数(张数不超过100),之后是多个发票类别(字符型,A或B或C)和相应

acm icpc-一个大整数乘法的acm题目问下,可以得话给个代码,谢谢了,想了挺久,没做出来

问题描述 一个大整数乘法的acm题目问下,可以得话给个代码,谢谢了,想了挺久,没做出来 T4:两两相乘的积为12!的个数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65535kB 描述 找出输入数据中所有两两相乘的积为12!的个数. 输入 输入数据中含有一些整数n(1≤n< 2^32 ). 输出 输出所有两两相乘的积为12!的个数. 样例输入 1 10000 159667200 9696 38373635 1000000 479001600 3 1 479001600 样例