有赞笔试编程题讨论,附字符翻转ac代码

第一题没AC的是不是没有考虑单引号

package company.youzan._20170921._01;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String s = in.nextLine();
            String result = process(s.toCharArray());
            System.out.println(result);
        }
    }

    private static String process(char[] s) {
        reverse(s, 0, s.length - 1);
        int i, j;
        for (i = 0; i < s.length; ++i) {
            if (isWord(s[i])) {
                for (j = i + 1; j < s.length; ++j) {
                    if (!isWord(s[j])) {
                        reverse(s, i, j - 1);
                        break;
                    } else if (j == s.length - 1) {
                        reverse(s, i, j);
                        break;
                    }
                }
                i = j;
            }
        }
        return String.valueOf(s);
    }

    private static void reverse(char[] s, int start, int end) {
        int i = start;
        int j = end;
        char c;
        while (i < j) {
            c = s[i];
            s[i] = s[j];
            s[j] = c;
            ++i;
            --j;
        }
    }

    private static boolean isWord(char c) {
        return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z' || c == '\'');
    }
}

第二题无限40%。。。
难倒m和n也是要来long?当时没试

package company.youzan._20170921._02;

import java.util.Scanner;

public class Main2 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLong()) {
            long k = in.nextLong();
            int m = in.nextInt();
            int n = in.nextInt();
            int x = -1, y = -1;
            for (int i = 0; i < m; ++i) {
                for (int j = 0; j < n; ++j) {
                    if (k == in.nextLong()) {
                        x = i;
                        y = j;
                    }
                }
            }
            System.out.println(x + " " + y);
        }
    }
}
全部评论
我第二题也是40% ,但你这个线性查询有可能会超时吧
点赞
送花
回复
分享
发布于 2017-09-21 21:06
第一题死活50 第二题数值是有范围的 我用long算法和你一样80
点赞
送花
回复
分享
发布于 2017-09-21 21:09
滴滴
校招火热招聘中
官网直投
单词的单引号不是数字键1左边的那个符号么,一直50%; 第二题70%,超内存了
点赞
送花
回复
分享
发布于 2017-09-21 21:11
第二题数据是排序的,可以全部读取后先在纵向二分查找定位到所在行,再在该行二分查找
点赞
送花
回复
分享
发布于 2017-09-21 21:11
擦 第一题没考虑`  妈的
点赞
送花
回复
分享
发布于 2017-09-21 21:20
for(i =0; i < s.length; ++i) {             if(isWord(s[i])) {                 for(j = i +1; j < s.length; ++j) {                     if(!isWord(s[j])) {                         reverse(s, i, j -1);                         break;                     }elseif(j == s.length -1) {                         reverse(s, i, j);                         break;                     }                 }                 i = j;             } 这段代码是什么意思?
点赞
送花
回复
分享
发布于 2017-09-21 21:23
只有一个半小时。。先做的问答,编程第二题直接空了。肯定跪了
点赞
送花
回复
分享
发布于 2017-09-22 10:52
你好,请问你有有赞面试题吗?有的话能不能麻烦发我一份。谢谢。 fangdreamer@163.com
点赞
送花
回复
分享
发布于 2017-09-22 11:17

相关推荐

TP-LINK 前端工程师 年包大概20出头 本科
点赞 评论 收藏
转发
点赞 6 评论
分享
牛客网
牛客企业服务