当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~
在此感谢左大神让我对算法有了新的感悟认识!
原问题
给定一个字符串str,再给两个字符串from和to,将str中出现过的from子串全都替换成to
如下:
str = abc123123, from = 123, to=x
结果为abc123
原问题:
1、将str中的from子串全部替换为0
2、再将连续的0替换为一个0
3、再将0全部替换为to字符串
原问题:
/**
* 二轮测试:替换
* @param str
* @param from
* @param to
* @return
*/
public static String replaceCp1(String str, String from, String to) {
if (str == null || from == null || to == null
|| str.length() == 0 || from.length() == 0 || to.length() == 0){
return null;
}
char[] chars = str.toCharArray();
char[] charsFrom = from.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == charsFrom[0]) {
int index = 0;
while (index < charsFrom.length && index < chars.length) {
if (charsFrom[index] != chars[i+index]) {
break;
}
index++;
}
if (index == charsFrom.length) {
// 说明全部相等.匹配成功
int tmp = 0;
while (tmp < index) {
chars[i + tmp] = 0;
tmp++;
}
}
// 结束之后,i调整为index
i = index;
}
}
// chars中的0全部替换成to,连续的算一个
int start = -1;
int index = 0;
char[] res = new char[chars.length];
for (int j = 0 ; j < chars.length; j++) {
if (chars[j] == 0) {
if (start == -1) {
start = j;
res[index++] = 0;
}
}else {
res[index++] = chars[j];
start = -1;
}
}
return String.valueOf(res, 0, index).replace("\u0000", to);
}
public static void main(String[] args) {
System.out.println(replaceCp1("123abcabc", "abc", "x"));
}
正在学习中
正在学习中
字符串类型的题目虽然简单,但是也是在业务中用到很多的部分,比如url的替换和ip地址的转换等很多业务都会涉及到字符串的预处理,虽然我们知道spring等框架都有工具方法,但是自己实现一遍再去看大佬们写的工具方法,对比下来才能看出自己代码精简程度和不足之处,比如上面的写法就是我个人随手写的,有很多地方可以优化的,大家可以引以为戒哈~
方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!