第1次写这个算法的思路:循环里,只要符合替换规则就直接进行替换,当没有符合的就结束替换行为, 这样提交到庞果,提示错误。。。
后发现原因是:替换顺序有先后 —— 没有按照我的想法 每次替换一组,再从头开始 找到符合规则 继续替换。。。。 弄了半小时
第2~ 次思路:必须要修复上面的bug,所以 就查出 哪个组合先出现,就先替换它。。。。。。转换思路有点慢,整了一个小时。。
我感觉我应该是解决了,结果庞果网 提示 缺少什么 符号。。。
import java.util.Arrays;
/**
* 给定一个字符串,仅由a,b,c 3种小写字母组成。
* 当出现连续两个不同的字母时,你可以用另外一个字母替换它,
* 如 有ab或ba连续出现,你把它们替换为字母c;
* 有ac或ca连续出现时,你可以把它们替换为字母b;
* 有bc或cb 连续出现时,你可以把它们替换为字母a。
* 你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度。
* @author szy
*
*/
public class Pongo {
public static void main(String[] args) {
System.out.println(minLength("bbbbcacbbabccabbbcabccaccbccaccbaaaabcbabaaacbbbbccabaccbcbccabacaaaccaaabbaaabcabacbabbbabababaabbabcbcbbcabbcccccbbbacbbaacbbabcaacaabbacabbabcccabaaccbbcacacbaccbcbaaabbbbcbcccaacbabccccccbbbacbbbb"));
// System.out.println(minLength("bbbbbbbbbbbcacbbabccabbcbaaabbacbbabccabbbcabccaccbccaccbaaaabcbabbbcbcccaacbabccccccbbbacbbbb"));
//System.out.println("bbbbbbbbbbbcacbbabccabbbcabccaccbccaccbaaaabcbabaaacbbbbccabaccbcbccabacaaaccaaabbaaabcabacbabbbabababaabbabcbcbbcabbcccccbbbacbbaacbbabcaacaabbacabbabcccabaaccbbcacacbaccbcbaaabbbbcbcccaacbabccccccbbbacbbbb".indexOf("ab"));
}
public static int minLength(String s) {
int len = s.length();
int ab = -1, ba = -1, ac = -1, ca = -1, bc = -1, cb = -1;
int []sortAry = new int[6];
int index = 0;
outer:
for (int i = 0; i < len; i++) {
System.out.println("每次进入循环转换的字符串:" + s);
//各种类型的 开始出现的索引值
ab = s.indexOf("ab");
ba = s.indexOf("ba");
ac = s.indexOf("ac");
ca = s.indexOf("ca");
bc = s.indexOf("bc");
cb = s.indexOf("cb");
sortAry = new int[] {ab, ba, ac, ca, bc, cb}; //索引数组
Arrays.sort(sortAry); //索引数组 从小到大排序
System.out.println(Arrays.toString(sortAry));
//求出最小组合 出现的 大于等于0的索引值,如果都为-1,则退出;
for (int j = 0; j < 6; j++) {
if (sortAry[j] == -1 && j < 6 - 1) {
continue;
} else if (sortAry[j] != -1) {
index = j;
break;
} else if (j == 6 - 1 && sortAry[j] == -1) {
break outer;
}
}
//索引数组中 index 位置的元素值 == 什么组合,则使用这个组合来 替换
if (sortAry[index] == ab) {
s = s.replace("ab", "c");
} else if (sortAry[index] == ba) {
s = s.replace("ba", "c");
} else if (sortAry[index] == ac) {
s = s.replace("ac", "b");
} else if (sortAry[index] == ca) {
s = s.replace("ca", "b");
} else if (sortAry[index] == bc) {
s = s.replace("bc", "a");
} else if (sortAry[index] == cb) {
s = s.replace("cb", "a");
}
//替换完成后,从头开始循环
i = -1;
len = s.length();
}
System.out.println("最后的转成的字符串:" + s);
return s.length();
}
}
分享到:
相关推荐
Labview 字符串转ASCII字符串,比如:“123”->"313233",“abc”->"616263
逆序输出任意字符串 逆序输出任意字符串 逆序输出任意字符串 逆序输出任意字符串 逆序输出任意字符串
把输入的字符串倒序输出,比如输入ABC,输出CB
动态规划算法:从1到26分别对应a-z的每一个字母,输入一串数字的字符串,转换为字母,输出所有可能的字母序列。如123->abc、lc、aw 本资源是按照二叉树的思想解决该问题。从字符串的头部开始,每次可以取一个或者两...
主要为大家详细介绍了JAVA实现abc字符串的排列组合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd ...
输入一行字符串,找出其中出现的相同且长度最长的字符串,输入它及其首字符的位置。例如“yyabcdabjcabceg”,输出结果应该为abc和3.
split()分割字符串 1.不同环境下的区分 Java:分割字符串不能写成split(“$”)//$为要分割的字符 Android:分割字符串需要加上中括号split(“[$]”)//$为要分割的字符 2.特殊用法–当split()分割字符串遇上特殊...
(关于空间的占用,如果要用一个和字符串a一样长的数组counter来计录a中各起点对应与b最大重合子字符串,这个数组也要和a一样长,空间上也不合适,除非情形很特殊,a短b长,不然不如直接malloc()一个堆空间来储存...
输入:首先输入数字n,表示要...输出:按长度为8拆分每个字符串后输出到新的字符串数组,长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 样例输入: 2 abc 123456789 样例输出: abc00000 12345678 90000000
它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下: String replace(char original,char replacement) 例如:String s="Hello".replace('l','w'); 第二种形式...
有关26关字母问题,可以实现如下功能: 1,能够通过键盘输入一连串字符 2。将个字母转换为其后面的第四个字母:如将“A“转换为“E”。 3。只对字母进行操作其他字符不变。
自己编的java判断一个字符串是否对称的,忘指导。判断一个字符串是否是对称字符串(方法改进) (一个一个比较) 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
例如输入字符串 abc,要求输出由字母 a、b、c 所能排列出来的所有字符串 abc,acb,bac,bca,cab,cba。 方法:递归法 以字符串 abc 为例介绍对字符串进行全排列的方法。 (1) 首先固定第一个字符 a,然后对后面的...
python编程题:字符串的... 1)我们先确定字符串第一个字母是谁,对于长度为n的字符串,总共有n种情况; 2)然后呢,问题就从"返回字符串中的字母排列组合" 变成了 "返回 第一个字母+除去第一个字母外的字符串的排列
示例 1:输出:3解释:- "a" 是 "abc" 的子字符串。示例 3:输出:3解释:patterns 中的每个字符串都作为子字符串出现在 word "ab
js字符串转换成数字 将字符串转换成数字,得用到parseInt函数。parseInt(string) : 函数从string的开始解析,返回一个整数。 举例:parseInt(‘123’) : 返回 123(int);parseInt(‘1234xxx’) : 返回 1234(int...
一个通过传递字符串就可以向上累加的动态库
正则表达式 ...[abc] abc三个字符中的任意一个字符 [^abc] 不包含abc的任意一个字符 [a-zA-Z] 表示必须是范围之间的内容 [a-zA-Z&&[^bc]] 排除所有字母当中不包括bc [0-9] 表示0到9之间的数字
string :需要进行正则处理的字符串 pattern :进行匹配的正则表达式 position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大...