j*****u 发帖数: 1133 | 1 1. 我一开始想成根据history的stock price来做predict了,想了半天。。。
其实是这个题的变种
int array A里找两个position i和j,要求A[j]和A[i]的差maximum,同时i
static void BestDay(int[] stockPrices, out int buyDate, out int sellDate)
{
buyDate = sellDate = 0;
int maxDiff = 0, minPrice = stockPrices[0], minPriceDate = 0;
for (int i = 1; i < stockPrices.Length; ++i)
{
int price = stockPrices[i];
int diff = price - minPrice;
if (diff > maxDiff)
{
buyDate = minPriceDate;
s... 阅读全帖 |
|
s*******f 发帖数: 1114 | 2 //A. Given an arbitrary tree, can you print it level by level (with each
level
//printed on the same line).Define your own tree node structure, can be
//binary tree or n-ary tree.
struct Node{
int d;
std::vector children;
};
void PrintByLevel(Node *r){
if (!r)
return;
std::queue q;
q.push(r);
int pre_count = 1;
int count = 0;
while (!q.empty()){
Node *p = q.front();
for (std::vector::const_iterator ci = p-
>children.begin(); ci != p->children.end(); ++ci){
q.push(*ci);
++cou... 阅读全帖 |
|
l*****a 发帖数: 14598 | 3 step1: sort input string
step2:
for(int i=start;i
{
if(i!=start)&&(str[i]==str[i-1]) continue;
swap(str[i],str[start]);
func(i+1,str);
swap(str[i],str[start]);
} |
|
g******0 发帖数: 221 | 4 Start from the front and the back at the same time.
Back always decrease, front can increase or reset to 0.
O(n)
working code attached in c++.
===========================
#include
#include
using namespace std;
char* longestPalindromePrefix(char* str, int len)
{
bool flag = 0;
int front = 0;
int back = len-1;
// Find palindrome
while(front < back)
{
if (str[front] == str[back])
{
flag = 1;
front++;
back--;
}
else
{
fl... 阅读全帖 |
|
c******t 发帖数: 1500 | 5 我改了一点你的程序,刚在VS 2008下编译通过了
#include
using namespace std;
void reverse (char *str);
int main(){
char str[] = "hello";
reverse(str);
cout<
}
void reverse(char *str){
char* begin = str;
char* end = str;
char tmp;
if(str)
{
while(*end)
++end;
--end;
while(begin
{
tmp = *begin;
*begin = *end;
*end=tmp;
++begin;
--end;
}
}
... 阅读全帖 |
|
s*****y 发帖数: 897 | 6 根据题目和next_permutation 的实现,写了个相应的,assume input string is
sorted
inline void swap(char *i, char *j) {
char tmp = *i;
*i = *j;
*j = tmp;
}
inline void reverse(char *start, char *end){
while (start < end) {
swap(start, end);
start ++;
end--;
}
}
bool perm_loop(char *str, char *start, char *end) {
char *i = end-1;
//find first two pairs from the end that *i < *(i+1)
while((i >= start) &&(*i >= *(i+1))) i--;
//could not find such pair
if... 阅读全帖 |
|
s*****y 发帖数: 897 | 7 根据题目和next_permutation 的实现,写了个相应的,assume input string is
sorted
inline void swap(char *i, char *j) {
char tmp = *i;
*i = *j;
*j = tmp;
}
inline void reverse(char *start, char *end){
while (start < end) {
swap(start, end);
start ++;
end--;
}
}
bool perm_loop(char *str, char *start, char *end) {
char *i = end-1;
//find first two pairs from the end that *i < *(i+1)
while((i >= start) &&(*i >= *(i+1))) i--;
//could not find such pair
if... 阅读全帖 |
|
g**********y 发帖数: 14569 | 8 sigh, 边界条件又写错了,修改版:
public boolean matches(String pattern, String str) {
int i = 0;
while (i < pattern.length() && pattern.charAt(i) != '?'
&& pattern.charAt(i) != '*')
i++;
if (i == pattern.length())
return pattern.equals(str);
char c = pattern.charAt(i - 1);
if (pattern.charAt(i) == '?') {
return pattern.substring(0, i - 1).equals(str.substring(0, i - 1
))
&& (matches(c + pattern.sub... 阅读全帖 |
|
s**********e 发帖数: 326 | 9 我来贴个general的code
void diagnalPattern(char* str, int rowNum){
int charNum = 0;
for(int i = 0; i < strlen(str); i++){
if(isValidChar(str[i])){
charNum++;
}
}
int colNum = (charNum + rowNum - 1) / rowNum;
char** arr;
arr = new char*[rowNum];
for(int i = 0; i < rowNum; i++)
arr[i] = new char[colNum];
for(int i = 0 ; i < rowNum; i++)
for(int j = 0; j < colNum; j++)
arr[i][j] = ' ';
int curPos = 0;
... 阅读全帖 |
|
f*******t 发帖数: 7549 | 10 平衡括号的题可以用贪心法做吧
#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... 阅读全帖 |
|
d********w 发帖数: 363 | 11 需要逻辑缜密阿,
我实现的好像有bug,大家能想到比较好的办法么
static int encode(String str) {
int num = 0;
int sum = 0;
int cur = 0;
boolean vowelBefore = false;
boolean vowel;
str = str.toLowerCase();
for ( int i=0; i< str.length(); i++) {
if (map.get(str.charAt(i)) != null) {
cur = map.get(str.charAt(i));
vowel = true;
} else {
vowel = false;
}
if (str.char... 阅读全帖 |
|
g*****1 发帖数: 998 | 12 【 以下文字转载自 Programming 讨论区 】
发信人: guagua1 (), 信区: Programming
标 题: 请教一道c/c++题
发信站: BBS 未名空间站 (Fri Jan 27 22:47:12 2012, 美东)
char *m()
{
char str[50];
strcpy(str,"how are you");
return str;
}
int main()
{
char s[50];
strcpy(s,m());
printf("%s",s);
//cin.get();
return 0;
}
为什么结果可以正确输出呢?我知道return by pointer可以make copy,可是return之
后storage不是free了吗?
另外,为什么下面这个就只能由一部分正确输出?
char *m()
{
char str[20];
strcpy(str,"how are you");
return str;
}
int main()
{
printf("%s",m());
//cin.get();... 阅读全帖 |
|
p*i 发帖数: 411 | 13 int myatoi(const string& str) {
const int n = str.size();
int curr = 0; // current index
while ((curr < n) && (isspace(str[curr]))) curr++; // skip leading
spaces
int sign = 1; // positive
if (str[curr] == '-') {
sign = -1; curr++;
}
if (curr == n)
throw runtime_error("Invalid input");
// prepare overflow check
int base, extra;
if (sign == 1) {
base = numeric_limits::max() / 10;
extra = numeric_limits::max() % 10;
... 阅读全帖 |
|
r*****k 发帖数: 1281 | 14 来自主题: JobHunting版 - 上一道题吧 大侠们帮看看对不对。。。
思想:从第一个开始扫描 遇到 (, i++
遇到 ), 如果i>0 {i--; 如果i==0 或者下一个字符不是),说明找到一个local
longest
match,reset i=0,比较这个是不是目前最大match, 是就存起来,不是就抛弃}
------------------------------------
void matchs(char* str, int& max, int &num){
int i =0; max=0, num=0;
int curr_len=0;
if(*str == '\0' || str == NULL) {max=0; num=0; return;}
//if there is a match, put the len of this match to vector
vector match;
while(*str != '\0'){
char next = *(str+1);
if(*str == '(')... 阅读全帖 |
|
r*****k 发帖数: 1281 | 15 来自主题: JobHunting版 - 上一道题吧 把我程序里面的match found condition
从if(i==0 || next != ')') 改为 if(i==0 && next != '(')应该就可以handle你这种
情况了。
-----------------------------------------------------
void matchs1(char* str, int& max, int &num){
int i =0; max=0, num=0;
int curr_len=0;
if(*str == '\0' || str == NULL) {max=0; num=0; return;}
//if there is a match, put the len of this match to vector
vector match;
while(*str != '\0'){
char next = *(str+1);
... 阅读全帖 |
|
s******n 发帖数: 3946 | 16 要那么复杂么,只要判断前一个数和后一个数是否翻转了"-"即可
int atoi(char* str) {
bool neg = false;
if (*str=="-") {
str++;
neg = true;
} else if (*str=="+")
str++;
int value = 0;
while (*str) {
int digit = *str-'0';
if (digit>9 || digit<0) throw "error";
int newvalue = value*10 + neg?(-digit):digit;
if (value>0 && newvalue<0 || value<0 && newvalue>0) throw "overflow";
value = newvalue;
str++;
}
return value;
}
} |
|
p*****2 发帖数: 21240 | 17 我来写一个标准的吧。也练练手。
public class test
{
public static void main(String[] args)
{
new test().run();
}
PrintWriter out = null;
int score(String str, int start, int len)
{
if (len == 2)
{
if (str.charAt(start) == str.charAt(start + 1))
return 2;
}
else if (len == 3)
{
char[] a = str.substring(start, start + 3).toCharArray();
if (a[0] == a[1] && a[1] == a[2])
return... 阅读全帖 |
|
p*****2 发帖数: 21240 | 18
不好意思。刚才写的太滥了。没有优化。这次这个应该才是标准的。
import java.io.*;
import java.util.*;
public class test
{
public static void main(String[] args)
{
new test().run();
}
PrintWriter out = null;
int score(String str, int start, int len)
{
if (len == 2)
{
if (str.charAt(start) == str.charAt(start + 1))
return 2;
}
else if (len == 3)
{
char[] a = str.substring(start, start + 3).toCharArray();
if... 阅读全帖 |
|
s*******f 发帖数: 1114 | 19 //回报本版,码遍本版
//Given a string of sorted integers, e.g. "1 52 69 456789 994546566";
//and a a number e.g. 69.
//You need to tell if it is in the input, e.g. 69=>true.
//strlen is O(n), don't use C style string for O(log n), suppose
//the string is friendly without lots of blank.
void GetWordPos(const char *mid, const char *left, const char *right, const
char **pstart, const char **pend){
while (isspace(*mid))
++mid;
*pstart = mid;
while (*pstart >= left && !isspace(**pstart))
... 阅读全帖 |
|
Z*****Z 发帖数: 723 | 20 二爷,看不太懂 :(
写了两个testcase您看看?
public class SearchSequence {
static String min(String str, String word) {
int n = str.length();
int m = word.length();
int[][] dp = new int[n + 1][m + 1];
for (int i = 0; i <= n; i++)
dp[i][m] = 0;
for (int j = 0; j < m; j++)
dp[n][j] = n + 1;
for (int i = n - 1; i >= 0; i--)
for (int j = m - 1... 阅读全帖 |
|
B*******1 发帖数: 2454 | 21 你的code的确牛,学习了。
但是我肯定写不出来,改了一下思路,在string前面pack了一个10,再计算,绕过很多
一开始的初始条件
int decodeString(const string &s)
{
if (s.size() == 0) return 0;
string str2 = "10" + s;
const char *str = str2.c_str();
int a = 1, b = 1, c;
str += 2;
while (*str) {
c = 0;
if (*(str-1) == '1' || (*(str-1) == '2' && *str <= '6'))
c += a;
if (*str != '0')
c += b;
a = b;
b = c;
str++;
}
return c;
} |
|
a*******y 发帖数: 1040 | 22 这个recursion吧,随便写了下,可能有bug
void GenerateParenthesis(int left,int right, int level, string str, vector<
string> &result)
{
if(left ==0 && right ==0)
{
result.push_back(str)
return;
}
if (left > 0)
{
str[level] = ')';
GenerateParenthesis(left -1, right + 1,level+1, str, result);
}
if (right > 0)
{
str[level] = '(';
GenerateParenthesis(left, right -1,level+1, str, result);
}
return;
}
call this function with
string str(2*n,'\0');
vector阅读全帖 |
|
c******t 发帖数: 391 | 23 判断回文那题,照着思路写了一个,不知道对不对,请指点:
public static boolean checkPalindrome(String str){
str = str.toLowerCase();
int i = 0;
int j = str.length()-1;
while(i
while(!isValid(str.charAt(i)))
i++;
while(!isValid(str.charAt(j)))
j--;
if(str.charAt(i)!=str.charAt(j))
return false;
i++;
j--;
}
return true;
}
public static boolean isValid(char ch){
if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z'))
retu... 阅读全帖 |
|
a********y 发帖数: 1262 | 24 private static java.util.Hashtable cache = new java.util.
Hashtable();
public String countAndSay(int n)
{
// Start typing your Java solution below
// DO NOT write main() function
Object result = cache.get(new Integer(n));
if(result != null)
{
return (String)result;
}
if(n == 1)
{
cache.put(new Integer(1), "1");
return "1";
}
e... 阅读全帖 |
|
w****x 发帖数: 2483 | 25 //serialize, deserialize vector
int serialize(vector& vec, char* str)
{
if (str == NULL)
return 0;
char* pWriter = str;
*((int*)pWriter) = vec.size();
pWriter += sizeof(int);
for (int i = 0; i < vec.size(); i++)
{
strcpy(pWriter, vec[i].c_str());
pWriter += 1 + strlen(pWriter);
}
return pWriter - str;
}
void deserialize(char* str, vector& vec)
{
if (NULL == str)
return;
int nSize = *((int*)str);
c... 阅读全帖 |
|
s********u 发帖数: 1109 | 26 各种不顺,早上apple来了拒信,下午google面的也不好,阿森纳还输球。。
可能还是沟通能力太差了,应该是很简单的题目,就是不知道他想说什么。
我发觉面试相比leetcode一大难度就是有时候面试官会说的比较vague,要靠自己问。
。要是他每次都直接把题目书写出来,倒是方便多了。。
就是实现一个strchr,只不过第二个参数不是字符,而是字符串,返回第一次出现的指
针。
/*
Find the first occurrence in str of _any_ character in set. Both are NULL
terminated ASCII C-strings. This is like strchr, except that the second
parameter functions as a set, rather than a single character.
str set returns
qxcdef csz str + 2 == &str[2]
axcdef wya str + 0 == &str[0]
axcdef cxa... 阅读全帖 |
|
s********u 发帖数: 1109 | 27 各种不顺,早上apple来了拒信,下午google面的也不好,阿森纳还输球。。
可能还是沟通能力太差了,应该是很简单的题目,就是不知道他想说什么。
我发觉面试相比leetcode一大难度就是有时候面试官会说的比较vague,要靠自己问。
。要是他每次都直接把题目书写出来,倒是方便多了。。
就是实现一个strchr,只不过第二个参数不是字符,而是字符串,返回第一次出现的指
针。
/*
Find the first occurrence in str of _any_ character in set. Both are NULL
terminated ASCII C-strings. This is like strchr, except that the second
parameter functions as a set, rather than a single character.
str set returns
qxcdef csz str + 2 == &str[2]
axcdef wya str + 0 == &str[0]
axcdef cxa... 阅读全帖 |
|
w********s 发帖数: 1570 | 28 #include "stdafx.h"
#include |
|
w********s 发帖数: 1570 | 29 #include "stdafx.h"
#include |
|
m*********a 发帖数: 3299 | 30 第一题是用递归么?
#include
#include
typedef struct output_string{
char string[20];
struct output_string *next; }output_string;
void stringCopy(char *str_source,char *str_dest,int no_char){
while (no_char--) *str_dest++=*str_source++;
}
void allString(char *str,output_string *output,int char_position){
output_string *tmp;
while ((*str!='?')&(*str!='\0'))
output->string[char_position++]=*str++;
if (*str=='\0') {output->string[char_position]='\0';return;... 阅读全帖 |
|
c****d 发帖数: 2418 | 31 我觉得只能用递归吧
getsubstr(str,k)
{
num = number of distinct charactor in str
p = positions of distinct charactor in str
if num<=k
return str
else
str_1=str(1,p_{k+1}-1)
str_2=str(p_1+1,p_{k+2}-1)
...
str_m=str(p_{num-k-1}+1,end of str)
for all i
substr_i=getsubstr(str_i,k)
return substr_i with max length
}
number |
|
|
p**o 发帖数: 3409 | 33
def parse( s ) :
result = ''
lst = [ eval(i) for i in s[1:-1].split(', ') ]
head, p0 = lst[0], lst[1]
diff0 = p0 - head
flag = True
num_consecutives = 2
for p in lst[2:] :
if not flag :
flag = True
diff0 = p - p0
p0 = p
continue
diff = p - p0
if flag and diff0 <> diff :
if 2 == num_consecutives :
ss = str(head)
head = p0
diff0 = ... 阅读全帖 |
|
p**o 发帖数: 3409 | 34
def parse( s ) :
result = ''
lst = [ eval(i) for i in s[1:-1].split(', ') ]
head, p0 = lst[0], lst[1]
diff0 = p0 - head
flag = True
num_consecutives = 2
for p in lst[2:] :
if not flag :
flag = True
diff0 = p - p0
p0 = p
continue
diff = p - p0
if flag and diff0 <> diff :
if 2 == num_consecutives :
ss = str(head)
head = p0
diff0 = ... 阅读全帖 |
|
g*****1 发帖数: 998 | 35 char *m()
{
char str[50];
strcpy(str,"how are you");
return str;
}
int main()
{
char s[50];
strcpy(s,m());
printf("%s",s);
//cin.get();
return 0;
}
为什么结果可以正确输出呢?我知道return by pointer可以make copy,可是return之
后storage不是free了吗?
另外,为什么下面这个就只能由一部分正确输出?
char *m()
{
char str[20];
strcpy(str,"how are you");
return str;
}
int main()
{
printf("%s",m());
//cin.get();
return 0;
}
然后上面char str[20];改成比如char str[50],输出就完全是乱得了 |
|
d****n 发帖数: 1637 | 36 this makes the array safe.
char *m()
{
Static char str[50];
strcpy(str,"how are you");
return str;
}
或者这样 thread safe
char * m(){
char *ret=(char *)malloc(sizeof(char)*20);
strcpy(str, "I am good");
return str;
}
main(){
char * str=m();
printf("%s\n",str);
free(str);
} |
|
p*********t 发帖数: 2690 | 37 2网友的意见不同,哪个是对的?
newpolice -- function char *m() {} is valid
Xentar -- it's undefined.
char *m()
{
char str[50];
strcpy(str,"how are you");
return str;
}
int main()
{
char s[50];
strcpy(s,m());
printf("%s",s);
//cin.get();
return 0;
}
为什么结果可以正确输出呢?我知道return by pointer可以make copy,可是return之
后storage不是free了吗?
另外,为什么下面这个就只能由一部分正确输出?
char *m()
{
char str[20];
strcpy(str,"how are you");
return str;
}
int main()
{
printf("%s",m());
//cin.get();
return 0;
}
然后上面char str[20];改成比如cha... 阅读全帖 |
|
h**l 发帖数: 168 | 38 The following code with function call can shift a string but the code
without function call can not. What might be the problem? Thanks!
_______________________________________________________
void shift(char a[])
{
int i=0;
while(a[i]) a[i] = a[++i];
}
int main()
{
char str[]= "afdd";
shift(str);
cout<
return 0;
}
_____________________________________________________________
int main()
{
char str[]= "afdd";
int i=0;
while(str[i]) str[i] ... 阅读全帖 |
|
p*********t 发帖数: 2690 | 39 fun1()在返回一个局部变量的地址,所以输出的是這個地址的值,因为fun1()的局部变
量在函数结束时消失,那个地址可能又被分配了新的值,所以是乱码。
要想输出abc,可以在fun1()的str设为static,这样即使fun1()函数结束,str[]还是在
内存存在。
char *fun1() {
static char str[]="ABC";
return (str);
}
有下面这段code, 为什么fun1()输出乱码, 而fun2()输出正确: ABC.
====== code ============
#include
int main() {
char *fun1(), *fun2();
printf("%s\n%s\n", fun1(), fun2());
return 0;
}
char *fun1() {
char str[]="ABC";
return (str);
}
char *fun2() {
char (*str)[]="ABC";
return (str);
... 阅读全帖 |
|
d*********o 发帖数: 6388 | 40 https://www.weibo.com/ttarticle/p/show?id=2309404476341004140787
很难想象,南医大杀人案犯罪嫌疑人麻某在隐匿28年之后于南京落网,只是始于其老家
远房亲戚的一次常规采血。与之形成对比的是,案件刚发生时,南京公安系统曾抽调数
百名精干警力,走访排查人员超过1.5万人,但并没有取得任何突破。这其中,发挥关
键作用的是一个近年来各地投入巨大精力建设的,能够反映家族关系的Y染色体位点信
息的数据库“Y库”。
在事发后媒体对麻某周围人的采访中,很难听到那些“典型”凶手的人物特征——20多
年前麻某就搬到现在的小区,住一栋约60平米,装修普通的房子,喜欢狗,为人和气热
情。邻居去他家里,他总会递烟倒水。人们知道他在一家大型企业任职司机,车上常放
着本圣经。他的工作表现也没什么异常,有正式编制,还被派驻过德国,家里的两条狗
就是从德国带回来的。他和妻子的感情也没听说有什么不好,“有一个女儿,都已经上
大学了。”邻居们说。
正常的认知方式里,很难把这样一个“老实人”同28年前的恶性强奸杀人案联系在一起
。1992年3月20日上完晚自习后,... 阅读全帖 |
|
b*****n 发帖数: 2324 | 41 面试迟到了半个小时。。。。我分特。。
在早上上班之前的rushhour中坐了一个多小时的出租车。。
如果做地铁就正好不会迟到了。。可是我不想穿戴整齐去挤地铁。。
在前台领了ID上六楼,就看见几个很酷的黑以人在面前,几步一个。。
其中一个主动打招呼,让我坐着等人来,给人感觉像很热情的黑社会那种。。
然后一个人领我去四楼,直接就开始跟RD的人interview
第一轮两个人,问了我简历上的背景的一些问题
因为我以前不是cs的,但是作的东西跟建模有关,问了很多
让我写一个remove space from string的程序
我写了下面这个:
void removespace(char * str){
if(str == 0 || *str == '\0')
return;
char* str2;
while(*str!='\0' && *str!=' ')
str++;
str2=str;
while(*str2 == ' ')
s |
|
f*********5 发帖数: 576 | 42 lo=0;hi=0; min=sizeof(str);
while(*str!='\0')
{
if (*str) not in target chars
{ str++;
if !(***)lo++;
hi++;
continue;
}
flag for *str ++;
if( all the flag for target chars >=1)
{ if (hi-lo
set lo to next location that target chars happened in the
str;
flag for *str --;
}
hi++;
} |
|
a***9 发帖数: 364 | 43 呵呵,也写了一个,也是0秒
#include
#include
using namespace std;
int counter= 1;
int end = 0;
void bin21(string str, int start)
{
if(start >= end)
return;
if (start < 0) start = 0;
while((str[start] == '0') && (start < end)) start++;
while((str[start+1] != '0') && (start < end)) start++;
if((str[start +1] == '0') && (start < end))
{
if(str[start] == '1')
{
str[start] = '0';
str[start + 1] = '2';
++counter; |
|
n*****u 发帖数: 5 | 44 写了个不用hashset的方法,不过太长了点。。需要预处理得到unique letters和count
。不知道有没简洁的解法?
void do_perm(vector& letters, vector& count, string& str, int len)
{
if(str.size()==len) {
cout << str << " ";
return;
}
for(int i=0; i
if(count[i]) {
str.push_back(letters[i]);
--count[i];
do_perm(letters, count, str, len);
++count[i];
str.erase(str.size()-1);
}
}
}
void do_comb(vector |
|
s*******e 发帖数: 93 | 45 因为只是词被打乱,空格被删除,没有打乱整个词组,所以我想到的做法是
(应该可以work,但是可能效率不是最高的)
bool equals(string s1, string s2);
string firstNString(string s, int count);
string substringFromIndex(string input, int index);
string sort(string);
(以上几个function应该可以意会,就不implement了)
bool beginsWith(string input, string word)
{
return equals(sort( firstNString(input,word.length) ) , sort(word) );
}
struct result
{
string str;
bool ok;
}
typedef struct result Result;
Result function(string input, string[] words)
{
found=false;... 阅读全帖 |
|
V*****i 发帖数: 92 | 46 There is no need to pass Dictionary and lookup table, use global variable or
use class. My solution as follows:
#include
#include
#include
#include
using namespace std;
// T(n) = \sum_{i=1}^{n-1} (T(i) * H(i+1))
const int MAXSIZE = 100;
class find_str {
private:
set dict;
int lookup_table[MAXSIZE];
public:
find_str(set &d) {
dict = d;
for (int i=0; i
... 阅读全帖 |
|
l*****g 发帖数: 685 | 47 用C++写了一个版本:
void RecursivelyRemoveSubString(char *str, const char *sub)
{
if (!str || !sub || *sub == 0 || *str == 0 || strlen(str) < strlen(sub))
return;
char *end = str;
char *cur = str;
int subLen = strlen(sub);
char subEnd = sub[subLen - 1];
while (*cur != 0)
{
*end = *cur;
if (*end == subEnd)
{
char *reCur = end;
int subIndex = subLen - 1;
bool match = true;
bool reCurEnd = false;... 阅读全帖 |
|
l*****g 发帖数: 685 | 48 void shiftChars(char * str, size_t len)
{
if (!str || len < 3) return;
char lastChar = *(str + (len - 1));
memmove(str+2, str+1, len - 2);
*(str+1) = lastChar;
shiftChars(str + 2, len-2);
} |
|
w****y 发帖数: 5 | 49 careercup上面,chapter1, 问题 1.2
看了答案有点疑惑:
1 void reverse(char *str){
2 char *end = str;
3 char tmp;
4 if (str) {
5 while (*end){
6 ++end;
7 }
8 --end;
9 while (str < end){
10 tmp = *str;
11 *str++ = *end;
12 *end-- = tmp;
13 }
14 }
15 }
疑惑在第九行,(str < end) 两个指针比较什么意思?会有什么结果?
谢谢。 |
|
r*******t 发帖数: 99 | 50 这个题相当于一个Jump Game:一排格子,每一个可以往后面的某些格子里跳,每一跳
的cost是0。同时每一个可以往紧邻的下一个格子跳,每一跳的cost是1。把格子看成
vertex,跳看成edge的话就是一个directed graph的shortest path问题,而且这个图已
经是topologically ordered,只用从前往后scan一遍所有vertices,同时update当前
vertex前方与之相连的vertices就可以了。
每一个vertex有哪些outgoing的edges可以查用anagram索引过的dictionary来确定。索
引dictionary的时候记下最大词长可以减少look up的次数。
string minSkip(vector& dictionary, string& str) {
multimap ana2word;
size_t maxLength = 0;
for (size_t i = 0; i < dictionary.size(); ++i) {
... 阅读全帖 |
|