o*****e 发帖数: 99 | 1 问题的关键是每当前面单词选定一个字母,后面就不能重复了。
(不知道相邻单词能不能取同一个字母,假设不能)
那就是一个不复杂的递归问题了。
My pseudo code,
String array size n
S0 ~ Sn-1
Output out[0 ~ n-1]
void func(S[], out[], k) {
if (k==n) {
print(out);
return;
}
for(i in 0 ~ strlen(S[k]-1){
if (S[k][i] not in Out[0 ~ k-1]) {
out[k] = S[k][i];
func(S, out, k+1);
}
}
}
main:
func(S, out, 0)
How to design efficiency algorithm to find whether
char S[k][i] is in string Out[0 ~ k-1]
A simple hash ... 阅读全帖 |
|
o*****e 发帖数: 99 | 2 问题的关键是每当前面单词选定一个字母,后面就不能重复了。
(不知道相邻单词能不能取同一个字母,假设不能)
那就是一个不复杂的递归问题了。
My pseudo code,
String array size n
S0 ~ Sn-1
Output out[0 ~ n-1]
void func(S[], out[], k) {
if (k==n) {
print(out);
return;
}
for(i in 0 ~ strlen(S[k]-1){
if (S[k][i] not in Out[0 ~ k-1]) {
out[k] = S[k][i];
func(S, out, k+1);
}
}
}
main:
func(S, out, 0)
How to design efficiency algorithm to find whether
char S[k][i] is in string Out[0 ~ k-1]
A simple hash ... 阅读全帖 |
|
S**I 发帖数: 15689 | 3 #include
#include
void reverseStr(char str[], int begin, int end){
char temp;
while(end > begin){
temp = str[begin];
str[begin++] = str[end];
str[end--] = temp;
}
}
void reverseWord(char str[]){
int begin = 0, end = 0, length = (int) strlen(str) - 1;
reverseStr(str, begin, length);
while(end < length){
if(str[end] != ' '){
begin = end;
while(end... 阅读全帖 |
|
f*****y 发帖数: 444 | 4 Update: onsite 失落归来。不知道当时怎么这么晕菜,写一个strlen 函数忘了检查空
指针。犯个严重低级错误。pass 了。还有两个brain teaser, 一个太简单不说了,另
一个是称8球问题, careercup150上有。 |
|
r*******y 发帖数: 1081 | 5 if no NULL, then trouble |
|
t*******i 发帖数: 4960 | 6 打的一个草稿,不处理负数
int NextP(int num){
if (num < 0)
throw -1;
char str[11];
itoa(num, str, 10);
if (strlen(str) == 1)
throw -1;
pos = len-1;
while (pos >= 1){
if (str[pos] > str[pos - 1])
break;
pos --;
}
if (pos == 0)
throw -1;
--pos;
int min = findLargerMin(str, pos + 1, len – 1, str[pos]);
swap(str, pos, min);
sort(str, pos + 1, len - 1);
return atoi(str);
} |
|
b******e 发帖数: 3348 | 7 ☆─────────────────────────────────────☆
littlebolt (i love bolt) 于 (Thu Jun 16 14:13:42 2011, 美东) 提到:
签了nda,phone和onsite写一起了
1.把一个字符串转成float,字符串可能是负的一百点三还有个指数E-09这样的
2.反转单链表..
3.给一个整数,求next permutation 就是数字组成一样的 但是比这个数大的最小的一
个数
4.一个很大的文件 怎么去掉duplicate
5. circular sorted array找元素
6.分层打印tree
7.一个字符串,每个字符可以替换成好多其他字符,打印所有可能
8.很简单的一个题,就是会用vector, set, map, pair这些玩意就行了
9.应该还有一个题,不难,但是怎么都想不起来了...
效率很高,拒信很快,move on啦~~
☆─────────────────────────────────────☆
gate (离开之后,再见以前) 于 (Thu Jun 16 14:17:... 阅读全帖 |
|
S**I 发帖数: 15689 | 8 #include
#include
#include
struct StringCount{
char s[100];
int count;
};
int compare(const void * a, const void * b){
return ((*(struct StringCount *)a).count < (*(struct StringCount *)b).count);
}
void printSortedWords(char * s, FILE * file){
int size = strlen(s);
struct StringCount sc[100];
int num = 0;
char newstr[100];
int i = 0;
for(; i < size; i++){
if(s[i] != ' '){
int j = 0;
while(s[i]... 阅读全帖 |
|
w****x 发帖数: 2483 | 9 int ClacTarget(int nLen, int nIndex)
{
assert(nLen > 0 && nIndex > 0 && nLen > nIndex);
if (nIndex < nLen/2)
return 2 * nIndex;
return (nIndex - nLen/2) * 2 + 1;
}
char* InplaceConvert(char* str)
{
if (NULL == str)
return NULL;
int nLen = strlen(str);
if (0 == nLen || nLen%2 != 0)
return str;
int nCount = nLen - 2;
for (int i = 1; i < nLen && nCount > 0; i += 2)
{
int nCur = ClacTarget(nLen, i);
char cTmp = str[nCur];
... 阅读全帖 |
|
a***r 发帖数: 93 | 10 这题如果用DP来做,哪位给分析一下什么是subproblem?
【 以下文字转载自 Programming 讨论区 】
发信人: minisand (老婆是A+海博), 信区: Programming
标 题: 请教一个字符串比较排序的问题
发信站: BBS 未名空间站 (Mon Nov 9 16:35:46 2009, 美东)
之前有人贴出了常见的那个求Maximum repetitive substring的代码,如下:
void MaxDuplicatedSubstring(char *input, char *result)
{
int length = strlen(input);
char **substrings = new char**[length];
for (int i=0; i < length; i++)
substrings[i] = input + i;
qsort(substrings, length, sizeof(char*), (int (*)(const void*, const void*
))strcmp);
... 阅读全帖 |
|
q**p 发帖数: 147 | 11 1,
void newBuffer(char* outBuffer, size_t sz) {
outBuffer = new char[sz];
}
int main() {
const char* kung = "KUNG";
char* foo;
size_t len = strlen(kung);
newBuffer(foo, len);
memset(foo, 0, len+1);
strncpy(foo, kung, len);
cout << foo << endl;
}
这个可以编译,但是有bug,运行之后知道是foo的问题,具体不太明白,求指点
2,
B is a class inherited from A.
B *myPointer = new B();
A *myOtherPointer = myPointer;
printf(“%x”, myPointer);
printf(“%x”, myOtherPointer);
这段代码的两个... 阅读全帖 |
|
s*******f 发帖数: 1114 | 12
void GetAllComb_(char *str, vector *ret){
static vector vc;
if (!*str){
ret->push_back(string(vc.begin(), vc.end()));
return;
}
char *p = str + 1;
while (*p == *str)
++p;
GetAllComb_(p, ret);
for (int i = 0; i < p - str; ++i){
vc.push_back(*str);
GetAllComb_(p, ret);
}
while (!vc.empty() && vc.back() == *str)
vc.pop_back();
}
void GetAllComb(char *str, vector *ret){
if (!str)
re... 阅读全帖 |
|
s*******f 发帖数: 1114 | 13
void GetAllComb_(char *str, vector *ret){
static vector vc;
if (!*str){
ret->push_back(string(vc.begin(), vc.end()));
return;
}
char *p = str + 1;
while (*p == *str)
++p;
GetAllComb_(p, ret);
for (int i = 0; i < p - str; ++i){
vc.push_back(*str);
GetAllComb_(p, ret);
}
while (!vc.empty() && vc.back() == *str)
vc.pop_back();
}
void GetAllComb(char *str, vector *ret){
if (!str)
re... 阅读全帖 |
|
g*********e 发帖数: 14401 | 14
,
false
I didn't quite understand your post.
I mean
foo(string){
if(strlen(string)==1) {
if string exist return true;
else return false;
}
else if(string don't exist) return false;
else return foo(tring) | foo(sring)...;
}
so if a string "abc" doesn;'t exist, we don't bother to check ab, ac, bc
bas |
|
r*******n 发帖数: 3020 | 15 俺给你想法一样,
优化方法, 把中间结果放掉hashtable里,
中间结果是满足条件的word, 不用再调用函数判断了,
如果在hashtable就返回真.
foo(string){
if(strlen(string)==1) {
if string exist return true;
else return false;
}
else if(string don't exist) return false;
else return foo(tring) | foo(sring)...;
} |
|
g*********e 发帖数: 14401 | 16
,
false
I didn't quite understand your post.
I mean
foo(string){
if(strlen(string)==1) {
if string exist return true;
else return false;
}
else if(string don't exist) return false;
else return foo(tring) | foo(sring)...;
}
so if a string "abc" doesn;'t exist, we don't bother to check ab, ac, bc
bas |
|
r*******n 发帖数: 3020 | 17 俺给你想法一样,
优化方法, 把中间结果放掉hashtable里,
中间结果是满足条件的word, 不用再调用函数判断了,
如果在hashtable就返回真.
foo(string){
if(strlen(string)==1) {
if string exist return true;
else return false;
}
else if(string don't exist) return false;
else return foo(tring) | foo(sring)...;
} |
|
s******n 发帖数: 226 | 18 简单写一下把
input char a[n];
func(char* a){
int n = strlen(a);
int f[n];
for(int i=0;i
int max =0;
for(int j=i;j>=0;j--){
if(isWord(a,j,i) && f[j]+1>max){
max = f[j]+1; f[i] = max;
// prev array to bookkeep
// max can be defined using different standard.
}
}
}
} |
|
k***t 发帖数: 276 | 19 题目其实很简单,自己摆乌龙了。细节如下。
虽然连on-site都没拿到,个人感觉,作为第一次电面,基本达到操练面试的目的。自
我介绍,项目表达要言简意赅。Coding要冷静,不紧张,确保看清题目,自我检查code
要细。
与大家分享面经/经历。也希望大家给comment。Code是我从collabedit上直接贴过来的
。欢迎comment,帮我提高。谢谢。
一电面:老美。
前半部分是简历上Performance Tuning的各种Projects的细节;
后半部分是Website Performance的各种问题。
基本对答如流,获面试人认同。并说我们网站增长快,急需你这样有Performance方面
经验的人。Highly recommend for the next step.
二电面:老印。题目其实很简单,自己摆乌龙了。
开始讲Projects,老印问了一个简历上Resource Leakage Finding的东西。
回答不够简洁清晰,偏冗长。老印试图澄清,最后彻底澄清。花了一些时间。
后半个小时,两道Coding题:
1。判断string是否数字?如1.2。并写TestCa... 阅读全帖 |
|
s*******y 发帖数: 105 | 20 求一个string的所有的permutation. C code如下:
int permutations(char *str)
{
int length, i, *used;
char *out;
length = strlen(str);
out = (char *)malloc(length+1);
if(!out)
return 0;
out[length] = '\0';
used = (int*)malloc(sizeof(int)*length);
if(!used)
return 0;
for(i=0;i
used[i]=0;
DoPermute(str, out, used, length, 0);
free(out);
free(used);
return 1;
}
void DoPermute(char *str, char* out, int* used, int length, int recursLev)
{
int i;
if(recursLev==l... 阅读全帖 |
|
b*****c 发帖数: 1103 | 21 String Similarity
为啥米KMP会超时呢,不是死循环,我测过100000的,只过了4/10 test case
int test_num;
char str[100024];
int F[100024];
long long ans;
void FailureFunction(char P[], int F[],int m){
int i,j;
F[0]=0; // assignment is important!
j=0;
i=1;
while(i
if(P[i]==P[j]){
F[i]=j+1;
i++;
j++;
}else if(j>0){
j=F[j-1];
}else {
F[i]=0;
i++;
}
}
}
void solve(int m)
{
int i=m;
int... 阅读全帖 |
|
f*******t 发帖数: 7549 | 22 平衡括号的题可以用贪心法做吧
#include
#include
#include
#include
#define INVALIDCHAR -1
using namespace std;
char *balance(char *str)
{
int len = strlen(str);
if(len < 1)
return NULL;
char *buff = (char*)calloc(len + 1, 1);
stack left;
for(int i = 0; i < len; i++) {
if(str[i] == '(')
left.push(i);
else if(str[i] == ')') {
if(left.empty()) {
buff[i] = INVALIDCHAR;
co... 阅读全帖 |
|
k***t 发帖数: 276 | 23 看到一个 Space O(1)的,写了一下。
不过"(ab(xy)u)2)" -> "(ab(xyu)2)"而不是(ab(xy)u)2)" -> "(ab(xy)u)2"。
#define INVD -1
void balance (char *a) {
if (!a || !*a) return;
int l=0, u=(int)strlen(a)-1;
while (1) {
while (l<=u && a[l]!='(') {
if (a[l]==')') a[l]=INVD;
l++;
}
if (l>u) break;
while (u>=l && a[u]!=')') {
if (a[u]=='(') a[u]=INVD;
u--;
}
if (l>u) break;
l++; u--;
}
char *p=a;
bool dirty=false;
while (*a) {
... 阅读全帖 |
|
w****x 发帖数: 2483 | 24 const char* myitoa(int num, char str[])
{
assert(a);
char* pIterBeg = str;
if (num < 0)
{
num = -num;
*pIterBeg++ = '-';
}
//use long not short to avoid INT_MIN overflow
unsigned int numshort = num;
char* pIter = pIterBeg;
while (true)
{
*pIter++ = numshort%10 + '0';
numshort = numshort/10;
if (numshort == 0) break;
}
*pIter = 0;
int nLen = strlen(pIterBeg);
assert(nLen > 0);
char* pIterEnd = ... 阅读全帖 |
|
S**I 发帖数: 15689 | 25 ☆─────────────────────────────────────☆
recursive (递归) 于 (Mon Apr 11 10:56:49 2011, 美东) 提到:
大半夜收到HR的thank you note。不用管什么NDA了
本人ECE fresh PhD,背景是电路/EDA,跟G业务基本没什么关系
同学内部推荐的,很简单的一次电面就给了onsite
题都不难,但是自己没把握好机会,出了一些小bug。
总的感觉,出错就是硬伤,宁可从最简单的算法写起,也不能出错。
电面:
1,Skip list, http://en.wikipedia.org/wiki/Skip_list
写code实现struct skip_list * find(struct skip_list *head, int value)
2,sorted array with repeated elements
for given element, find out its range.
e.g. A A B B B B B C C D D E F G, given B, the out... 阅读全帖 |
|
|
s*******f 发帖数: 1114 | 27 //码遍本版
//inside for LOOP:
//1st round: check (ling)(mind)(rabo)(ofooowingdingbarrwingmonkeypoundcake
//2nd round: check l(ingm)(indr)(aboo)(fooowingdingbarrwingmonkeypoundcake
//...
//this can avoid double check, and, O(n) time, for slice window
string SubStrWordsGreat(const char *str, const vector &vs){
map ms;
int len = strlen(str);
const char *end = str + len;
int lensub = 0;
if (vs.size() == 0)
return "";
int sz = vs[0].size();
for (ve... 阅读全帖 |
|
h*****g 发帖数: 312 | 28 写了一个,有错误请指正~~
//copy on write
class String
{
private:
char *str;
int len;
public:
String():str(0),len(0)
{
}
String(char *p)
{
len=strlen(p);
char *tm=new char(len+2);
memset(tm,0,len+2);
str=tm+1;
strncpy(str,p,len+1);
}
String(const String &ms)
{
len=ms.len;
str=ms.str;
++(str[-1]);
}
Strin... 阅读全帖 |
|
h*****g 发帖数: 312 | 29 写了一个,有错误请指正~~
//copy on write
class String
{
private:
char *str;
int len;
public:
String():str(0),len(0)
{
}
String(char *p)
{
len=strlen(p);
char *tm=new char(len+2);
memset(tm,0,len+2);
str=tm+1;
strncpy(str,p,len+1);
}
String(const String &ms)
{
len=ms.len;
str=ms.str;
++(str[-1]);
}
Strin... 阅读全帖 |
|
d****n 发帖数: 1637 | 30 差不多用了30分钟
#define BSZ 4096
char buffer[BSZ];//buffer same size as 4096
int curr=BSZ-1; //current position read in buffer
int eof=0; //eof flag
extern char * read4096();
char *getline(){
char *s; //return string
int i, ssz=0; //size of s
for(;;){
if (!eof){
if (curr==(BSZ-1)) {
strcpy(buffer, read4096()); //read API
curr=0;
if (strlen(buffer)<4096 ) e... 阅读全帖 |
|
l*********8 发帖数: 4642 | 31 bool Convert(char * buf, int bufSize)
{
int length = strlen(buf);
int newLength = length;
for (int i=0; i
if (buf[i] == 'A')
newLength--;
else if(buf[i] == 'B')
newLength++;
if (newLength > bufSize - 1) return false;
int w = newLength-1;
for (int r = length-1; r>=0; r--) {
if(buf[r] != 'A')
buf[w--] = buf[r];
if (buf[r] == 'B')
buf[w--] = buf[r];
}
buf[newLength] = '\0';
return true;
} |
|
s****e 发帖数: 638 | 32 下面这个是O(n) 不知道这样做行不行。
#include
#include
#include
using namespace std;
void shuffle(char* A)
{
int size = strlen(A);
int i=1;
while(i
if (A[i] & 0x80) {
i++;
continue;
}
int j=i;
int j2;
while(true){
if ( j < size/2 ) j2 = j*2;
else j2 = 2*(j-size/2)+1;
if (j2<=i) break;
swap(A[i], A[j2]);
A[j2] |= 0x80;
j=j2;
}
i++;
}
for (int i=0; i
}
int ... 阅读全帖 |
|
q***y 发帖数: 236 | 33 不清楚,贴出code大家分析吧。注释部分是后来加的。
unsigned int num_valid_decodings(char const* n_string) {
if (!n_string) return 0;
int n = strlen(n_string);
if (n==1) {
if(n_string[0]=='0') return 0; // not valid
else return 1;
}
vector num(n, 0);
char *p = (char *) n_string;
if (p[0] == '0') return 0; // not valid
else num[0] = 1;
if (p[0]=='1' ) num[1]=2;
else if (p[0]=='2' && p[1]<='6') num[1]=2;
else num[1] = 1;
for (int i=2; i
... 阅读全帖 |
|
q***y 发帖数: 236 | 34 起始条件有点问题,改了一下。
unsigned int num_valid_decodings(char const* n_string) {
if (!n_string) return 0;
int n = strlen(n_string);
if (n==1) {
if(n_string[0]=='0') return 0; // not valid
else return 1;
}
vector num(n, 0);
char *p = (char *) n_string;
if (p[0] == '0') return 0; // not valid
else num[0] = 1;
if (p[1]!='0') num[1]+=num[0];
if (p[0]=='1' || p[0]=='2' && p[1]<='6') num[1]++;
for (int i=2; i
if (p[i]!='0') num[... 阅读全帖 |
|
w****x 发帖数: 2483 | 35 int _inner_ways(const char* pStr)
{
if (*pStr == 0)
return 1;
if (*pStr <= '0' || *pStr > '9')
return 0;
int n = _inner_ways(pStr+1);
if ((*pStr == '1' && *(pStr + 1) >= '0' && *(pStr + 1) <= '9')
|| (*pStr == '2' && *(pStr + 1) >= '0' && *(pStr + 1) <= '6'))
n += _inner_ways(pStr+2);
return n;
}
int GetWays(const char* pStr)
{
if (NULL == pStr || *pStr == 0)
return 0;
return _inner_ways(pStr);
}
int GetWaysDP(const char* pStr)
... 阅读全帖 |
|
f*******n 发帖数: 12623 | 36 你是这里出错:
char *newstr = new char[strlen(str)];
...
newstr[k] = '\0';
strcpy(str, newstr); |
|
b*****e 发帖数: 474 | 37 brutal force O(N*N) answer:
assuming input string a with strlen N.
int begin, end, i;
int len[N], maxlen=0;
for (i=0; i< 2*N-1; i++ ) {
// start from middle
begin = i/2;
end = (i+1)/2;
len[i] = 0;
while ( begin>=0 && end
len[i]+= (begin--==end++)? 1: 2;
if ( len[i] > maxlen ) maxlen = len[i];
}
output maxlen;
may be this can be optimized to reach O(N) |
|
g**********t 发帖数: 475 | 38 如果最后一个字符用'\0'标记结尾的话,可以不用传字符串的长度,然后用strlen得到
数组长度。 |
|
G******i 发帖数: 5226 | 39 ☆─────────────────────────────────────☆
viisa (viiiiiisa) 于 (Fri Dec 23 01:33:02 2011, 美东) 提到:
之前都不知道还有如此方便的网站,
随便在上面做了几道题目,竟然有很不错的公司主动联系我给电面,比 refer 效率高
多了。做5道题目就可以申Facebook, Dropbox 等公司了
下月6号还有个比赛 http://codesprint.interviewstreet.com/recruit/challenges/
☆─────────────────────────────────────☆
quantx (X矿工) 于 (Fri Dec 23 01:39:55 2011, 美东) 提到:
啥公司?
☆─────────────────────────────────────☆
viisa (viiiiiisa) 于 (Fri Dec 23 01:54:43 2011, 美东) 提到:
这里有列表,里面的一个自己感兴趣的公司
http://blog.inter... 阅读全帖 |
|
l****c 发帖数: 838 | 40 You should read in the string and parse.
You don't know how long the first part string is or how long the number is.
So if you define:
char tempprice[10];
char ticker[10];
You have the risk of buffer overflow.
Here is my solution. I debug it as I wrote it, so it is not optimized.
it is pure C. You can get result with 2 lines of perl or python code
============================
#include
#include
#include
int main()
{
char *str = "GOOD|89.34";
char *ptoken, *... 阅读全帖 |
|
w****x 发帖数: 2483 | 41 struct NODE
{
vector vecGUID;
NODE* nodes[256];
NODE() { memset(nodes, 0, sizeof(nodes)); }
};
void _inner_get_guid(NODE* pNode, const char* str, int k, vector& vec)
{
if (NULL == pNode)
return;
if (k <= 0)
{
vec = pNode->vecGUID;
return;
}
_inner_get_guid(pNode->nodes[*str], str+1, k-1, vec);
}
vector getGUID(const char* str, NODE* pRoot, int k)
{
vector vecRet;
if (NULL == pRoot || NULL == str || *str == 0 ... 阅读全帖 |
|
w****x 发帖数: 2483 | 42
//Turn Roman number to decimal
//I(1), V(5), X(10), L(50), C(100), D(500), M(1000)
int GetNum(char c)
{
if (c == 'I' || c == 'i')
return 1;
else if (c == 'V' || c == 'v')
return 5;
else if (c == 'X' || c == 'x')
return 10;
else if (c == 'L' || c == 'l')
return 50;
else if (c == 'C' || c == 'c')
return 100;
else if (c == 'D' || c == 'd')
return 500;
else if (c == 'M' || c == 'm')
return 1000;
return 0;
}
... 阅读全帖 |
|
l*********8 发帖数: 4642 | 43 我写一个 (还没有考虑“”的问题,好像挺复杂)
bool removeComment(char * s)
{
char *r = s, *w = s;
while (r && *r){
if ( !strncmp(r, "/*", 2) ) {
r = strstr(r+2, "*/");
r = (r!=NULL) ? r+2 : r;
} else if ( !strncmp(r, "//", 2) ) {
r = strchr(r+2, '\n');
r = (r!=NULL) ? r : s+strlen(s);
} else {
*w++ = *r++;
}
}
if (w != NULL)
*w = '\0';
return r!=NULL;
} |
|
h*******e 发帖数: 1377 | 44 2哥的算法可以手动split 就是 i == strLen || isreturn(str[i]) isreturn(str[i-
1]) 不同时候 check 一下 substr(str, segStart, i - segStart ) 把 相应的字符串
拿出来检查
同一行如果先遇到了 // /* 记录下 startPos。 和startType // 期待第一个 /n /*
期待第一个 */ 字符串 内移动 在字符串内保留一个 movPos
每次 遇到 // 前 /n 后 和 / * */不移动 movPos 不移动,否则str[movPos++] =
当前的值 就是one pass的, by the way twitter 离我们公司不远:)那个地方在
twitter 搬过去之后有了很多 穿戴整齐的人,不像以前San Francisco tenderloin街
区到处都是homeless到处游荡了。 |
|
Q*******e 发帖数: 939 | 45 看来面霸都是用Java/C++
如果Valuof, strlen, Reverse
都自己写, 怎么可能
搞到20行内 |
|
b***m 发帖数: 5987 | 46
嗯,这个我看到了,我的版本是这样:
// caller has to free memory allocated
char *string_reverse2(const char *string)
{
if( !string ) return NULL;
int len = strlen(string);
char *res = (char *)malloc(len + 1);
if( !res ) return NULL;
char *str = (char *)string + len - 1;
while( str >= string )
{
*res = *str;
res++;
str--;
}
*res = '\0';
return res;
} |
|
l*********8 发帖数: 4642 | 47 char * string_reverse1(char *string)
{
if (string) {
for(int i=0, j=strlen(string)-1; i < j; i++, j--)
swap(string[i], string[j]);
}
return string;
}
char *string_reverse2(const char *string)
{
return string_reverse1(strdup(string));
} |
|
w****x 发帖数: 2483 | 48 struct NODE
{
string str;
NODE* pLft;
NODE* pRgt;
NODE(const char* szStr = "") : str(szStr), pLft(NULL), pRgt(NULL) {}
};
void serialize(NODE* pNode, char*& p)
{
if (p == NULL) return;
if (pNode == NULL)
{
*((int*)p) = 0;
p += sizeof(int);
return;
}
int nLen = pNode->str.length();
*((int*)p) = 1;
p += sizeof(int);
strcpy(p, pNode->str.c_str());
p += nLen+1;
serialize(pNode->pLft, p);
serialize(pNode->pRgt... 阅读全帖 |
|
t*********h 发帖数: 941 | 49 void foo(char* s) {
if(!*s) return;
int end[2], start[2], chars[2];
int maxlen=2,maxstart=0,i,n=strlen(s),p;
if(n<3) {printf("%s\n",s);}
start[0]=0;end[0]=0;chars[0]=s[0];
if(s[1]==s[0]) {
start[1]=0;end[1]=1;chars[1]=chars[0];
} else {
start[1]=1;end[1]=1;chars[1]=s[1];
}
for(i=2;i
if(s[i]!=chars[0]&&s[i]!=chars[1]) {
p=end[0]
chars[p]=s[i];
start[p]=i;
start[1-p]=end[p]+1;
end[p]=i;
} else {
p=(chars[0]=... 阅读全帖 |
|
h********g 发帖数: 496 | 50 我也来一个。发现这个题目其实现场写不容易,细节很容易忽略。算法很简单,可还是
写了半个小时,怎么办?
void f(char*s, char*dest){
int set[256]={0};
int i=0, len=strlen(s);
int count=0, maxWin=0;
int l=0, r=len; //local window edges
int ll, rr; //global window edges
while(i
if(count<2 || set[s[i]]){
r=i;
set[s[i]]++;
i++;
if(!set[s[i]]) count++;
if(maxWin
maxWin=r-l+1;
ll=l;
... 阅读全帖 |
|