假设
a="1231231234"
a1="1234"
b="12341231231234"
b1="12341234"
说是要将字符串中连续的子串删除,别人说是用正则ko,但是我还是想问一下,有没有算法可以搞定?
我的想法是遍历主串,查找相同的字符,如果字符相同比较每个字符间的距,距离相同开始遍历子串,如果子串相同那么这就是连续的字符串。感觉自己的想法实现起来十分的负责,不知道有没有实现的算法???
------解决方案--------------------------------------------------------
public static String delRepeatStr(String s){
char[] chrArr = s.toCharArray();
byte []flagArr = new byte[chrArr.length];
for (int i = 0; i < flagArr.length; i++) {
flagArr[i] = 0; //0:保留;1:不保留
}
for (int i = 0; i < chrArr.length; i++) {
int j = i - 1;
while (true)
{
if (j < (i - j - 1) || flagArr[j] == 1)
break;
boolean isRepeat = true;
for (int k = 0; k < i - j; k++) {
if (chrArr[i - k] != chrArr[j - k])
{
isRepeat = false;
break;
}
}
if (isRepeat)
{
for (int k = 0; k < i - j; k++) {
flagArr[i - k] = 1;
flagArr[j - k] = 1;
}
}
j--;
}
}
int remainCharCount = 0;
for (int i = 0; i < chrArr.length; i++)
if (flagArr[i] == 0)
remainCharCount++;
char[] chrArrRem = new char[remainCharCount];
int index = 0;
for (int i = 0; i < chrArr.length; i++)
{
if (flagArr[i] == 0)
{
chrArrRem[index++] = chrArr[i];
}
}
return new String(chrArrRem);
}
------解决方案--------------------------------------------------------
你要亲自匹配它们,精神可嘉。
有一个算法很考验你的毅力了,那个东西叫“KMP 算法”
http://www.google.com.hk/#hl=zh-CN&newwindow=1&safe=strict&q=kmp%E7%AE%97%E6%B3%95&oq=kmp+&aq=0g&aqi=g-g1g2g-g1g5g-g1&aql=1&gs_sm=e&gs_upl=2841l7784l0l9903l17l17l6l0l0l0l139l981l4.6l10l0&fp=d3d30df46fe9eda7&biw=799&bih=537
------解决方案--------------------------------------------------------
没有深入研究,帮顶。祝楼主好运
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
引用:
对于你说的那个字符串abababa,得出的结果只会是aba,因为有三个ab连续,aba不是连续的字符串,他们重叠了,谢谢你提出的问题。
为什么只会是aba呢
abababa
如果你这么看 它们也是两个相同的字串 ,只是没有挨在一起 怎么处理
1234234 怎么处理
12121212 怎么处理