首页 > 试题广场 >

编写一个diff函数,用来比较两个字符串的差异。

[问答题]
编写一个diff函数,用来比较两个字符串的差异。如果字符在第一个字符串中存在,在第二个字符串中不存在则输出减号和相应的字符;如果字符在第二个字符串中存在,在第一个字符串中不存在则输出加号和相应的字符;如果存在相同的子字符串,则子字符串中的内容都不需要输出。字符的比较结果用逗号分隔,每个差异的字符串都要找出来。要求充分利用相同的子字符串,尽可能优化算法保证输出的结果最短。作为参数的字符串中只会包含英文字母。

假设函数原型为,String diff(String a,String b)
 
调用diff("bcdef","abcdef"),返回结果应该为"+a"
调用diff("abcde","abdef"),返回结果应该为"-c,+f"
调用diff("aba","aababb"),返回结果应该为"+a,+b,+b"
public static void diff(String a, String b) {
StringBuilder sb = new StringBuilder();
List<Character> listA = new ArrayList<Character>();
List<Character> listB = new ArrayList<Character>();
for (char c : a.toCharArray()) {
listA.add(c);
}
for (char c : b.toCharArray()) {
listB.add(c);
}
Iterator<Character> itA = listA.iterator();

while (itA.hasNext()) {
char m = itA.next();
if (listB.contains(m)) {
itA.remove();
listB.remove(listB.indexOf(m));
}
}
for (char c : listA) {
sb.append("-" + c + ",");
}
for (char c : listB) {
sb.append("+" + c + ",");
}
if (sb.length() > 0) {
System.out.println("\"" + sb.substring(0, sb.length() - 1) + "\"");
}
}
发表于 2016-05-17 23:19:23 回复(0)
用java写的,比较笨~~
public static String diff(String a, String b) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length(); i++) {
if (result.indexOf(a.charAt(i) + "") == -1) {
char value = a.charAt(i);
if (b.indexOf(value + "") == -1) {
result.append("-" + value);
} else {
int numa = 0;
int numb = 0;
for (int j = 0; j < a.length(); j++) {
if (a.charAt(j) == value) {
numa++;
}
}
for (int j = 0; j < b.length(); j++) {
if (b.charAt(j) == value) {
numb++;
}
}
String oper = "";
if (numa - numb > 0) {
oper = "-";
} else {
oper = "+";
}
for (int j = 0; j < Math.abs(numa - numb); j++) {
result.append(oper + value);
}
}
}
}
发表于 2015-09-13 18:50:31 回复(0)
function diff (a,b){
    var aLen = a.length ;
    var bLen = b.length ;
    result = [];
    for (var i = 0 ; i < bLen ; i ++){
        if (a.indexOf (b[i ]) == -1 ){
            result .push ('+' +b[i ]);
         }
    }
    for (var i = 0 ; i < aLen ; i ++){
        if (b.indexOf (a[i ]) == -1 ){
            result .push ('-' +a[i ]);
         }
    }
    return result ;
}
编辑于 2015-07-31 15:17:38 回复(1)
字符顺序无关吧?diff("ab","ba") 应该返回"" ?
如果这样的话用计数的方法,O(m+n)
发表于 2015-03-25 15:46:44 回复(1)