一道面试题!!求解

一个8位的字符串例如:abcdefgh, 截取他末尾成对出现的0,例如

10000000 截取后的结果:10

12345600 截取后的结果:123456

12340000 截取后的结果是:1234

10000001:则不做截取操作

10101010:则不做截取操作
问题补充

litianyu0815 写道
litianyu0815 写道
public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "1234570000";
        String str1 = "12340001";
        String str2 = "12342000";
        System.out.println(subDoubleZero(str));
        System.out.println(subDoubleZero(str1));
        System.out.println(subDoubleZero(str2));

    }

    public static String subDoubleZero(String str) {
        for (int i = str.length() - 1; i > 0; i--) {
            char c1 = str.charAt(i - 1);
            char c2 = str.charAt(i);
            if (c1 == '0' && c2 == '0') {
                String testStr = str.substring(0, i - 1);
                return subDoubleZero(testStr);
            }
            return str;
        }
        return str;
    }

 


我做的很粗糙,不过应该能帮助你。


真是太感谢你了!!

[quote="kidneyball"][code="java"]
s = s.replaceAll("(00)*$","");
[/code][/quote]

貌似没做到楼主的要求嘛

[code="java"]
s = s.replaceAll("(00)*$","");
[/code]

public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "1234570000";
        String str1 = "12340001";
        String str2 = "12342000";
        System.out.println(subDoubleZero(str));
        System.out.println(subDoubleZero(str1));
        System.out.println(subDoubleZero(str2));

    }

    public static String subDoubleZero(String str) {
        for (int i = str.length() - 1; i > 0; i--) {
            char c1 = str.charAt(i - 1);
            char c2 = str.charAt(i);
            if (c1 == '0' && c2 == '0') {
                String testStr = str.substring(0, i - 1);
                return subDoubleZero(testStr);
            }
            return str;
        }
        return str;
    }

 

litianyu0815 写道
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "1234570000";
String str1 = "12340001";
String str2 = "12342000";
System.out.println(subDoubleZero(str));
System.out.println(subDoubleZero(str1));
System.out.println(subDoubleZero(str2));
}

public static String subDoubleZero(String str) {
    for (int i = str.length() - 1; i > 0; i--) {
        char c1 = str.charAt(i - 1);
        char c2 = str.charAt(i);
        if (c1 == '0' && c2 == '0') {
            String testStr = str.substring(0, i - 1);
            return subDoubleZero(testStr);
        }
        return str;
    }
    return str;
}</pre>

 


我做的很粗糙,不过应该能帮助你。

这个应该不难,去查下api,感觉类似2楼的正则表达式会比较好

2楼的好简洁呀

[quote="kidneyball"][code="java"]
s = s.replaceAll("(00)*$","");
[/code][/quote]
:idea:

不用正则的方案 :D :

[code="java"]
public class RemoveDoubleZero {

public static String removeDoubleZero(String s) {
    int i;
    for (i = s.length(); i > 2 && s.charAt(i - 1) == '0' && s.charAt(i - 2) == '0'; i -= 2);
    return s.substring(0, i);
}

public static void main(String[] args) {
    System.out.println(removeDoubleZero("1"));
    System.out.println(removeDoubleZero("10"));
    System.out.println(removeDoubleZero("100"));
    System.out.println(removeDoubleZero("1000"));
    System.out.println(removeDoubleZero("10000"));
}

}
[/code]

[quote="kidneyball"]不用正则的方案 :D :

[code="java"]
public class RemoveDoubleZero {

public static String removeDoubleZero(String s) {
    int i;
    for (i = s.length(); i > 2 && s.charAt(i - 1) == '0' && s.charAt(i - 2) == '0'; i -= 2);
    return s.substring(0, i);
}

public static void main(String[] args) {
    System.out.println(removeDoubleZero("1"));
    System.out.println(removeDoubleZero("10"));
    System.out.println(removeDoubleZero("100"));
    System.out.println(removeDoubleZero("1000"));
    System.out.println(removeDoubleZero("10000"));
}

}
[/code][/quote]
上面那个比我的牛啊 连递归都没用啊

while(str.endwith("00")){
str = str.substring(0,str.length()-2);
}

[quote="kidneyball"]不用正则的方案 :D :

[code="java"]
public class RemoveDoubleZero {

public static String removeDoubleZero(String s) {
    int i;
    for (i = s.length(); i > 2 && s.charAt(i - 1) == '0' && s.charAt(i - 2) == '0'; i -= 2);
    return s.substring(0, i);
}

public static void main(String[] args) {
    System.out.println(removeDoubleZero("1"));
    System.out.println(removeDoubleZero("10"));
    System.out.println(removeDoubleZero("100"));
    System.out.println(removeDoubleZero("1000"));
    System.out.println(removeDoubleZero("10000"));
}

}
[/code][/quote]

向你学习了。

[quote="zkl_1987"][quote="kidneyball"][code="java"]
s = s.replaceAll("(00)*$","");
[/code][/quote]

貌似没做到楼主的要求嘛[/quote]

例如哪个输入数据?

[quote="zkl_1987"][quote="kidneyball"][code="java"]
s = s.replaceAll("(00)*$","");
[/code][/quote]

貌似没做到楼主的要求嘛[/quote]

符合要求,没错啊。去掉末尾成对的0。

你们都是刚工作啊?

这算法不用这么罗嗦吧~
[code="java"]
public static void main(String[] args){
String a = "werwr00000";
for(int i=0;i<a.length()/2;i++){
if(a.endsWith("00")){
a = a.substring(0,a.length()-2);
}else{
break;
}
System.out.println(a);
}
}
[/code]

……
[code="java"]
public static void main(String[] args){
String a = "1000000";
for(int i=0;i<a.length();i++){
if(a.endsWith("00")){
a = a.substring(0,a.length()-2);
System.out.println(a);
}else{
break;
}
}
}
[/code]

bf2624 你的代码也太那个啥了吧?

你知道你这样子会产生多少个String对象吗?
而且subString会进行native方法调用,JNI查找本地方法时的查找要用时间的,性能的话还是要考虑的。

还是kidneyball的指针移动比较好。

[code="java"]
public static void main(String[] args) throws Exception {
System.out.println(trimTailCoupleZero("100000"));
System.out.println(trimTailCoupleZero("00000"));
System.out.println(trimTailCoupleZero("0000"));

    System.out.println(trimTailCoupleZero("10000000"));
    System.out.println(trimTailCoupleZero("12345600"));
    System.out.println(trimTailCoupleZero("12340000"));
    System.out.println(trimTailCoupleZero("10000001"));
    System.out.println(trimTailCoupleZero("10101010"));
}

public static String trimTailCoupleZero(String str) {
    int n = str.length() - 1;
    int index = n;
    for (; index >= 0; index--) {
        if (str.charAt(index) != '0')
            break;
    }
    if (((n - index) & 1) != 0) {
        index++;
    }
    if (n == index)
        return str;
    else
        return str.substring(0, index + 1);
}

[/code]
不用递归,substring方法最多也只要调用一次