mengqingfeiaijia
2011-12-07 14:46 阅读 272
已采纳

一道面试题!!求解

一个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;
    }


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


真是太感谢你了!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

18条回答 默认 最新

  • 已采纳
    zkl_1987 zkl_1987 2011-12-07 14:46

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

    貌似没做到楼主的要求嘛

    点赞 评论 复制链接分享
  • iteye_1858 iteye_1858 2011-12-07 14:46

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

    点赞 评论 复制链接分享
  • litianyu0815 litianyu0815 2011-12-07 14:46
    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 litianyu0815 2011-12-07 14:46

    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>
    

     


    我做的很粗糙,不过应该能帮助你。
    点赞 评论 复制链接分享
  • fan578 不爱吃萝卜的兔子 2011-12-07 14:46

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

    点赞 评论 复制链接分享
  • ksqqxq ETCentury 2011-12-07 14:46

    2楼的好简洁呀

    点赞 评论 复制链接分享
  • iteye_20866 iteye_20866 2011-12-07 14:46

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

    点赞 评论 复制链接分享
  • iteye_1858 iteye_1858 2011-12-07 14:46

    不用正则的方案 :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]

    点赞 评论 复制链接分享
  • litianyu0815 litianyu0815 2011-12-07 14:46

    [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]
    上面那个比我的牛啊 连递归都没用啊

    点赞 评论 复制链接分享
  • luolyes luolyes 2011-12-07 14:46

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

    点赞 评论 复制链接分享
  • dong342492715 dong342492715 2011-12-07 14:46

    [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]

    向你学习了。

    点赞 评论 复制链接分享
  • iteye_1858 iteye_1858 2011-12-07 14:46

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

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

    例如哪个输入数据?

    点赞 评论 复制链接分享
  • dong342492715 dong342492715 2011-12-07 14:46

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

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

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

    点赞 评论 复制链接分享
  • litianyu0815 litianyu0815 2011-12-07 14:52

    你们都是刚工作啊?

    点赞 评论 复制链接分享
  • youxin6911 youxin6911 2011-12-07 15:15

    这算法不用这么罗嗦吧~
    [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]

    点赞 评论 复制链接分享
  • youxin6911 youxin6911 2011-12-07 15:18

    ……
    [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]

    点赞 评论 复制链接分享
  • mfkvfn mfkvfn 2011-12-08 11:38

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

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

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

    点赞 评论 复制链接分享
  • u011606457 _1_1_7_ 2011-12-08 14:49

    [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方法最多也只要调用一次

    点赞 评论 复制链接分享

相关推荐