拼多多面试题

给你一个字符串,给你两条规则,让你进行替换。如下。
String 的实现可以有o(n)的空间。
char[] 不允许有额外的空间。求大神解答。
(面试一问三不知,肯定挂了。隐约记得:模型?classloader,gc,jvm,线程的状态,notify,预防死锁,线程池,nio,in class和static class的区别(记不太清了))

// rule: 
// C -> CD
// AB -> B
// sample: ABC -> BCD, CC -> CDCD
void transform(char[] s, int n) {

}
String transform(String s) {
 String ss = new String();
 for(int  i = 0 ;i < s.length(); ++i ){
     if(s.charAt(i) == 'C'){
         ss=ss+"CD";
     }else if(i < s.length()-1&&s.charAt(i) == 'A'&&s.charAt(i+1)== 'B'){
         ss=ss+"B";
         i+=1;
     }else{
    ss=ss+s.charAt(i);
     }
 }
 return ss;
}
全部评论
这个,用暴力移动吧,也没要求时间复杂度
点赞
送花
回复
分享
发布于 2017-08-10 00:04
为嘛我也是济南,还没给我打电话,就发了邮件,蛋疼啊
点赞
送花
回复
分享
发布于 2017-08-10 02:50
网易互娱
校招火热招聘中
官网直投
什么岗啊,什么时候笔试的
点赞
送花
回复
分享
发布于 2017-08-09 21:35
同一个题目
点赞
送花
回复
分享
发布于 2017-08-09 21:38
搞C++的瑟瑟发抖,也是报的服务器,到时候问java就GG了
点赞
送花
回复
分享
发布于 2017-08-09 21:45
是电面,然后给网站做题吗?做题的话有测试用例吗?
点赞
送花
回复
分享
发布于 2017-08-09 21:51
楼主笔试答得如何?
点赞
送花
回复
分享
发布于 2017-08-09 21:53
你是什么地区的啊
点赞
送花
回复
分享
发布于 2017-08-09 21:55
直接replaceAll不行么
点赞
送花
回复
分享
发布于 2017-08-09 22:09
请教个问题,不允许有额外空间的话,是可以申请O(k)的额外空间吗?不然CC->CDCD这个存不下呢。。。
点赞
送花
回复
分享
发布于 2017-08-09 22:16
先从左到又将AB替换为A,然后再从左到右统计C的个数,然后从右到左将C替换为CD,每次直接放到最终位置上,这样可以吗?
点赞
送花
回复
分享
发布于 2017-08-09 22:43
不知道这么写行不行 #include <stdio.h>  #include <iostream>  #include <vector>  #include <deque>  #include <queue>  #include <set>  #include <stack>  #include <map>  #include<algorithm> #include<string> #include<functional> using namespace std; int main() { char s1[100];  while (gets(s1)){ int len = strlen(s1); int end = 99; for (int i = len - 1; i >= 0; i--){ if (s1[i] == 'C') { s1[end--] = 'D'; s1[end--] = 'C'; s1[i] = '#'; } else if ((i > 0) && (s1[i] == 'B'&&s1[i - 1] == 'A')){ s1[end--] = 'B'; s1[i] = '#'; i--; s1[i] = '#'; } else{ s1[end--] = s1[i]; s1[i] = '#'; } } for (int i = 0; i < 100; i++){ if (s1[i] >= 'A'&&s1[i] <= 'Z') cout << s1[i]; } } return 0; }
点赞
送花
回复
分享
发布于 2017-08-09 22:58
请问楼主,你是几点面试的啊
点赞
送花
回复
分享
发布于 2017-08-09 23:47
static String transform(String s) { String temp = ""; int flag = 0; int len = s.length(); for (int i = 0; i < len; i++) { if (s.charAt(i) == 'C') { temp += "CD"; } else if (s.charAt(flag) == 'A' && s.charAt(i) == 'B') { temp += 'B'; } else { if (s.charAt(i + 1) != 'B') { temp += s.charAt(i); } } flag = i; } return temp; }
点赞
送花
回复
分享
发布于 2017-08-10 00:05
void transform(char s [] , int n) {     int c = 0;     int c2 = 0;     for(int i=0;i<n;i++){         if(s[i] == 'A' && i+1<n && s[i+1] == 'B'){             s[i] = 'B';             s[i+1] = ' ';             c2++;         }         else if (s[i] == 'C') c++;     }     int i=0,j=1;     // i --> ' ' j--> char  swap(i,j)     for(;j<n&&i<n;){         cout << s[i] << endl;         if(s[i]!=' '){             i++;         }         else if(s[i]==' '){             j = i+1;             while(s[j]==' ' && j<n)j++;             if(j<n) swap(s[i],s[j]);         }     }     //deal with c     n = n + (c-c2);     i = i-1;     for(int k=n-1;k>=0 && i >= 0;i--){         if(s[i] == 'C'){             s[k--] = 'D';             s[k--] = 'C';         }         else s[k--] = s[i];     } }
点赞
送花
回复
分享
发布于 2017-08-10 09:14
求问,几道编程题?
点赞
送花
回复
分享
发布于 2017-08-10 10:38
in class 是啥?
点赞
送花
回复
分享
发布于 2017-08-10 11:01
楼主电面写代码的时候面试官是在电脑上能同步看到的吗?
点赞
送花
回复
分享
发布于 2017-08-13 15:33
这个我一面的时候也问了(当时也没答出来) 面试官说可以申请o1的辅助。(然而并没有用上) // rule: // C -> CD // AB -> B 简单说一下面完后整理的思路 先ab->b 然后所有右移压缩 然后从左边非空第一个开始遍历,非c则左移至左端,c执行c->cd并左移动 比如(x表示空) ABCCABD ->XXBCCBD ->BXXCCBD ->BCDXCBD ->BCDCDBD
点赞
送花
回复
分享
发布于 2017-08-13 16:11
建议如果允许,用StringBuffer更好
点赞
送花
回复
分享
发布于 2017-08-19 11:22

相关推荐

点赞 21 评论
分享
牛客网
牛客企业服务