日期:2014-05-20  浏览次数:20691 次

这个字符串替代应该怎样实现
假设
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
------解决方案--------------------
没有深入研究,帮顶。祝楼主好运
------解决方案--------------------
探讨

引用:

你要亲自匹配它们,精神可嘉。
有一个算法很考验你的毅力了,那个东西叫“KMP 算法”
http://www.google.com.hk/#hl=zh-CN&amp;amp;newwindow=1&amp;amp;safe=strict&amp;amp;q=kmp%E7%AE%97%E6%B3%95&amp;amp;oq=kmp+&amp;……

------解决方案--------------------



探讨
引用:
KMP算法不是匹配指定字符串咩?我需要做到的是删除连续的字符串,可能在这个过程当中会出现需要匹配的时候,但是我觉得,怎样找到连续相等的字符串才是关键啊。。

------解决方案--------------------
引用:

对于你说的那个字符串abababa,得出的结果只会是aba,因为有三个ab连续,aba不是连续的字符串,他们重叠了,谢谢你提出的问题。


为什么只会是aba呢
abababa
如果你这么看 它们也是两个相同的字串 ,只是没有挨在一起 怎么处理


1234234 怎么处理


12121212 怎么处理