O*z 发帖数: 109 | 1 在自学java,用eclipse写了下面的简单的代码,要实现的功能是:如果一个字符串中的
前两个字符和最后两个字符相同,则去掉最前面两个字符,返回其余的字符。但是下面
的代码就是不work,我觉得逻辑上没问题啊,请帮忙看看,谢谢
public class without2
{
public static void main(String[] args)
{
String str1 = "HelloHe";
System.out.println(rmfirsttwo(str1)); //expected result: lloHe
}
public static String rmfirsttwo(String str)
{
int strLength = str.length();
if(strLength <2)
{
return str;
}
e... 阅读全帖 |
|
n******1 发帖数: 3756 | 2 为什么我这里的literal string 和我的封装类equals不上呢,放进set里面也说不相同
,但是hashcode是相等
import java.util.HashSet;
import java.util.Set;
public class SetTesting{
static class WrapString{
String str;
public WrapString(String str){
this.str = str;
}
@Override
public String toString(){
return str;
}
@Override
public int hashCode(){
return str.hashCode();
}
@Override
p... 阅读全帖 |
|
l****g 发帖数: 249 | 3 $ str=`echo "456-456-1234"|sed "s/[0-9]/%/g"`
$ if [ $str != "%%%-%%%-%%%%" ]; then echo "NOT PHONE NUMBER"; fi
$
$ str=`echo "abc-456-1234"|sed "s/[0-9]/%/g"`
$ if [ $str != "%%%-%%%-%%%%" ]; then echo "NOT PHONE NUMBER"; fi
NOT PHONE NUMBER
$
$ str=`echo "617--1235555"|sed "s/[0-9]/%/g"`
$ if [ $str != "%%%-%%%-%%%%" ]; then echo "NOT PHONE NUMBER"; fi
NOT PHONE NUMBER
码。 |
|
j*******a 发帖数: 101 | 4 i wrote one. it works well.
#include
using namespace std;
char* reverse_word (char* str);
int main(int argc, char** argv){
char str[] = "this is very beautiful ";
cout <<"["<
cout << "["<< reverse_word(str)<<"]"<
char str2[] = "jokeslala rejected some 100k offers ";
cout <<"["<
cout << "["<< reverse_word(str2)<<"]"<
system("pause");
return 0;
}
char* reverse_word (char* str){
if (str = |
|
e******d 发帖数: 14 | 5 void func(void)
{
char *str = (char *) malloc(100);
strcpy(str, “"hello");
free(str);
if(str != NULL)
{
strcpy(str, “"world");
printf("%s\n", str);
}
}
The output is "world" on linux. The freed memory still can be accessed? |
|
s****u 发帖数: 118 | 6 单纯枚举permutation可以
void permutation(int depth, int len, string str) {
if (depth >= len) {
// aaa
return;
}
for (int i = depth; i < len; ++i) {
swap(str[i], str[depth]);
permutation(depth + 1, len, str);
swap(str[i], str[depth]);
}
} |
|
g*********s 发帖数: 1782 | 7 【 以下文字转载自 JobHunting 讨论区 】
发信人: gandjmitbbs (Nothing), 信区: JobHunting
标 题: free(char *)的问题
发信站: BBS 未名空间站 (Mon Dec 10 13:10:23 2007)
下面的代码有没有内存泄漏?如果希望提前释放掉str[3,4,5]的空间如何操作?
char *str=(char *) malloc(sizeof(char)*(strlen("hello")+1));
strcp(str, "hello");
str[2]=0;
printf("%s\n",str);
free(str); |
|
X****r 发帖数: 3557 | 8 你这个程序还有一些可改进的地方:
1)count是不需要的,最后两个指针的差就是要返回的结果。
2)对于函数参数来说,char str[]和char *差别不大,
你这种情况用后者更方便,可以不用pos。
int removeDuplicateString(char* str){
char *c;
for(c = str; *c; c++)
if(*c != *(c+1)) *str++=*c;
*str = '\0';
return c - str;
}
就我个人而言会把*(c+1)写成c[1],不过这个就见仁见智了。 |
|
X****r 发帖数: 3557 | 9 因为对于任何str,printf("%s\n", str);等价于puts(str),所以gcc作了优化,
这里正好str是NULL。printf("%s", str);并不等价于puts(str),所以真正的
printf被调用了,而glibc里的printf是可以处理NULL的。
其实从第一贴开始我就在说这个,要是还不清楚的话我实在不知道该怎么讲了。 |
|
e********r 发帖数: 2352 | 10 为了使用try ... throw ... catch的方式处理异常,写了以下一段程序,就是读取一
个文件
ifstream file;
file.exceptions(ifstream::failbit | ifstream::badbit);
try{
file.open("./file");
string str;
while(getline(file, str))
{
cout<
}
}
catch(ifstream::failure e)
{
cout<<"Return information: "<
}
file.close();
请问为什么总是会执行catch... 阅读全帖 |
|
w*****1 发帖数: 15 | 11 一个奇怪的现象。下面的code来自 http://leetcode.com/2010/11/microsoft-string-replacement-problem.html
我试了VS2010, VS2012. All get Access violation error on
if (matched)
*pSlow++ = 'X'; // <----error here
First-chance exception at 0x00AD14A3 in test.exe: 0xC0000005: Access
violation writing location 0x00AD586C.
读code和用debugger都看不出问题。 请哪位高人火眼金睛指点一下
#include
#include
#include
bool isMatch(char *str, const char* pattern) {
while (*pattern)
if (*str++ != *pattern++)
... 阅读全帖 |
|
r*****8 发帖数: 2560 | 12 如果free(str); 没写,像以下的例子。
程序运行结束以后,这15字节的内存会遗失吗?
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#include
void main() {
char *str;
str = (char *) malloc(15);
strcpy(str, “abc”);
printf("\n. %s \n", str);
free(str); // 假如这句没写。
} |
|
|
j**l 发帖数: 2911 | 14 面试的时候,test cases是重要的考查方面
假定有一个01字符串,用计数排序实现把所有的0放在左边,所有的1放在右边。
白板程序大致是这样
void CountSort01String(char str[])
{
if (str == NULL)
return;
int count0 = 0;
int count1 = 0;
int i;
for (i = 0; str[i] != '\0'; i++)
{
if (str[i] == '0')
count0++;
else if (str[i] == '1')
count1++;
else
{
printf("Invalid input string.\n");
return;
}
}
int n = count0 + count1;
for (i = 0; i < c |
|
K******g 发帖数: 1870 | 15 我的代码
/*write a function dayOfWeek("01-08-2010") return "Sunday"*/
//assuming the base date is xxxx year Jan 1st
enum weekday {Sun=0, Mon=1, Tue=2, ...}
int dayOfWeek(char* str)
{
if(str == NULL) return;
int month = atoi(str);
int day = atoi(str[3]);
int year = atoi(str[6]);
int days = (year - base_year)*365 + howManyLeapYears(year, baseyear);
days += daysStartingThisYear(month, day, year);
return (days%7+base_weekday)%7;
}
int daysStartingThisYear(int month, int d |
|
c***2 发帖数: 838 | 16 revert not reverse
an exmaple
str="abc"
foo(str)
str=="ABC"
revert(str)
str=="abc"
very simple |
|
j*********0 发帖数: 5 | 17 比如下面的一个function
void Removechars(char str[], char remove[]);
这里有两个极端情况,一个是str为空,一个是str=""。请问我下面的这种极端情况检
查代码对吗?
void Removechars(char str[], char remove[])
{
if (remove==NULL||str[0]==NULL)
{
return ;
}
} |
|
j*****u 发帖数: 1133 | 18 这个短些,用你的思路
static int LongestUniqueSubstring(string str)
{
if (string.IsNullOrEmpty(str)) return 0;
var lastPosition = new Dictionary(); // or use array with len
gth of #unicode_char
int maxLength = 0;
for (int head = 0, tail = 0; tail < str.Length; tail++)
{
int last;
if (lastPosition.TryGetValue(str[tail], out last))
head = last + 1;
else
maxLength = Math.Max(maxLength, tail - head + 1);
lastPosition[str[tai... 阅读全帖 |
|
j******a 发帖数: 55 | 19
substring的起
点,从该位置往后直到substring能cover所有字符。那么最多就有n个起点。问题是,
如何每次只用
O(1)来确定substring长度。
[0]和str[20]
两个地方。假设当前已经确定以str[0]为起点的substring长度。接下来应该确定以str
[1]为起点的
substring长度。该substring丢弃了str[0],所以必须要至少在str[20]结束,否则字
符a没被
cover。这就是基本思路。
这个空间复杂度有点高,不如ls的想法,只需要动态更新一个histogram,时间复杂度都
是2n |
|
f***g 发帖数: 214 | 20 仅仅判断(str[i]==str[i-1])
还不够
要看str[start]和str[i-1]之间有没有str[i] |
|
Z**********4 发帖数: 528 | 21 bool isMatch(char *str, const char* pattern) {
while (*pattern)
if (*str++ != *pattern++)
return false;
return true;
}
以上是C code 判断str里面是不是存在pattern
如果改成java的话
private static boolean isMatch (char[] str,char[] pattern)
{
int i=0;
while(i
{
if(str[i]!=pattern[i])
return false;
i++;
}
return true;
}
是不是只能这样啊?java不能用指针嘛?还有我只能用i
char数组作为参数 这样很不方便啊 我试了pattern.charAt(i)!=... 阅读全帖 |
|
j*******r 发帖数: 52 | 22 试贴一个C++代码,循环+递归,用一个bitset代表当前字符是否已经在之前位置被使用。
1 #include
2 #include
3 #include
4
5 using namespace std;
6
7 void permutation(const char* str, bitset<4> used, string r){
8 if(r.size() == strlen(str)){
9 cout<
10 }
11 for(int i = 0; i < strlen(str); ++i){
12 if(used[i])
13 continue;
14 used.set(i);
15 r += str[i];
16 permutation(str, used, r);
17... 阅读全帖 |
|
j*******r 发帖数: 52 | 23 试贴一个C++代码,循环+递归,用一个bitset代表当前字符是否已经在之前位置被使用。
1 #include
2 #include
3 #include
4
5 using namespace std;
6
7 void permutation(const char* str, bitset<4> used, string r){
8 if(r.size() == strlen(str)){
9 cout<
10 }
11 for(int i = 0; i < strlen(str); ++i){
12 if(used[i])
13 continue;
14 used.set(i);
15 r += str[i];
16 permutation(str, used, r);
17... 阅读全帖 |
|
s******d 发帖数: 61 | 24 可以像这样通过以为来做吗?还是%10比较好,还有其他什么更好的方法吗?
public static boolean judgepalidrom(int num){
char[] ch=new char[Integer.size];
for(int i=0;i
char[Integer.size-i-1]=(char)((num>>i)&1+'0');
}
String str=new String(ch);
for(int j=0;j
if(str[j]!=str[str.length()-j-1])
return false;
}
return true;
}
|
|
s*******f 发帖数: 1114 | 25 //Implement a function string balanceParanthesis(string s); which given a
//string s consisting of some parenthesis returns a string s1 in which
//parenthesis are balanced and differences between s and s1 are minimum.
//Eg - "(ab(xy)u)2)" -> "(ab(xy)u)2"
//")))(((" -> ""
void DelBrackets(char *str){
if (!str)
return;
deque sc;
deque sp;
char *p = str;
while (*p){
if (*p == '('){
sc.push_back('(');
sp.push_back(p);
}... 阅读全帖 |
|
w****x 发帖数: 2483 | 26 /*
Given tweet's inverted index,how to find phrases combination,e.g
phrase "twitter good tool", "twitter is a good tool" is better than "twitter
is good,
facebook is a better tool"
*/
bool GetClosestPhrase(hash_map>& dic, vector& strs,
int& nStart, int& nEnd)
{
for (vector::iterator it = strs.begin(); it != strs.end(); it++)
{
if (dic.find(*it) == dic.end())
return false;
}
int nNum = strs.size();
vector*> vec;
ve... 阅读全帖 |
|
w****x 发帖数: 2483 | 27 /*
Given tweet's inverted index,how to find phrases combination,e.g
phrase "twitter good tool", "twitter is a good tool" is better than "twitter
is good,
facebook is a better tool"
*/
bool GetClosestPhrase(hash_map>& dic, vector& strs,
int& nStart, int& nEnd)
{
for (vector::iterator it = strs.begin(); it != strs.end(); it++)
{
if (dic.find(*it) == dic.end())
return false;
}
int nNum = strs.size();
vector*> vec;
ve... 阅读全帖 |
|
k*****y 发帖数: 744 | 28 traverse一遍string,记当前位置是i;
用map pos记录word里面相应字母出现在i之前最后的位置;
如果word中每个字母都出现了,找出pos中位置最小的一个,就可以算出以i为结尾最短
的长度。
====================================
string getShortestSubstr(string &word, string &str) {
map pos;
int left, length=str.length()+1;
for( int i=0; i
char ch = str[i];
if( word.find(ch) != string::npos ) {
pos[ch] = i;
if( pos.size() == word.size() ){
int leftPos = i;
... 阅读全帖 |
|
l*********8 发帖数: 4642 | 29 这个题目很容易出错啊。
我写在纸上的程序好几个bugs。
加上在电脑的调试修改的时间,我总共花了两个小时才让程序基本正确(还不敢保证百分百正确,可能需要更多的测试案例)。这么慢怎么面试啊?
下面是程序(测试程序就不贴了):
void JustifyOneLine(const vector & words, int L, int lineStart, int
& lineEnd, vector & blankNum)
{
blankNum.clear();
int lengthSum = words[lineStart].size();
for (lineEnd = lineStart+1; lineEnd < words.size() && lengthSum + 1 +
words[lineEnd].size() <= L; lineEnd++) {
lengthSum += 1 + words[lineEnd].size();
blankNum.push_back(1);
}
int ... 阅读全帖 |
|
l*********8 发帖数: 4642 | 30 这个题目很容易出错啊。
我写在纸上的程序好几个bugs。
加上在电脑的调试修改的时间,我总共花了两个小时才让程序基本正确(还不敢保证百分百正确,可能需要更多的测试案例)。这么慢怎么面试啊?
下面是程序(测试程序就不贴了):
void JustifyOneLine(const vector & words, int L, int lineStart, int
& lineEnd, vector & blankNum)
{
blankNum.clear();
int lengthSum = words[lineStart].size();
for (lineEnd = lineStart+1; lineEnd < words.size() && lengthSum + 1 +
words[lineEnd].size() <= L; lineEnd++) {
lengthSum += 1 + words[lineEnd].size();
blankNum.push_back(1);
}
int ... 阅读全帖 |
|
l*********8 发帖数: 4642 | 31 贴一下我的程序,通过了leetcode judge.
感觉还是有些繁琐.
class Solution {
public:
bool isMatch(const char *s, const char *p) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(!s || !p)
return false;
if(p[0] == '\0' && s[0] != '\0')
return false;
const char * star = NULL;
const char * nextStar = NULL;
if (p[0] == '*') {
star = p;
p++;
}
while (1) {
n... 阅读全帖 |
|
d****n 发帖数: 233 | 32 Here is a iterative one. I know there is another iterative one which is more
compact.
bool isMatch(const char *str, const char *pattern) {
const char *pstr = str, *pp = pattern;
bool findStar = false;
while (*pstr && *pp) {
if (*pp == '*') {
str = pstr;
pattern = pp + 1;
findStar = true;
}
if (*pstr == *pp || *pp == '?') {
pstr++;
pp++;
con... 阅读全帖 |
|
l****c 发帖数: 838 | 33 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, *... 阅读全帖 |
|
a*******y 发帖数: 1040 | 34 我就在想有没有更好的办法出了用sufix tree
写了个傻的,不过觉得有更好的
bool strMatch(char* str, int start, int length)
{
for (int i = 0; i
{
if (str[start+i] != str[start-length+i])
return false;
}
return true;
}
bool ReturnConsecutiveString(char* str, int n, int& startindex, int&
endindex)
{
int i = 1, j,k;
bool bfail = false;
while (i < n)
{
for (j = 1; (i+j < n) && (i-j-1 >=0);j++)
{
for (k = 0; k<=j;k++)
{
... 阅读全帖 |
|
p*****2 发帖数: 21240 | 35 class Element{
String str;
int left;
int right;
public Element(String s, int l, int r){
str=s;
left=l;
right=r;
}
}
void print(int n){
Queue q=new LinkedList();
q.add(new Element("",0,0));
while(!q.isEmpty()){
Element e=q.poll();
if(e.left==n && e.right==n){
System.out.println(e.str);
}
else{
... 阅读全帖 |
|
g****y 发帖数: 240 | 36 第二题,只需要把第一个string中的数字map到第二个string的order就好了。
def reorder(str, order_str):
d = {c:i for i, c in enumerate(order_str)}
str = [c for c in str]
def get_key(c):
if c in d:
return d[c]
else:
return len(d)
str.sort(key=get_key)
return "".join(str) |
|
z******e 发帖数: 82 | 37 多谢大牛的test case
private static String uncomment(String str) {
boolean slash2 = false;
boolean inStr = false;
boolean slashstar = false;
StringBuilder sb = new StringBuilder();
char lastc = ' ';
char c = ' ';
int deleteStart = -1;
for (int i = 0; i < str.length(); i++) {
lastc = c;
c = str.charAt(i);
sb.append(c);
// ""
if (c == '"' && !slash2 && !slashstar) {
... 阅读全帖 |
|
w****x 发帖数: 2483 | 38 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... 阅读全帖 |
|
c*****a 发帖数: 808 | 39 新鲜写的 longest common prefix,之前没做过
public class Solution {
public String longestCommonPrefix(String[] strs) {
// Start typing your Java solution below
// DO NOT write main() function
if(strs.length ==0) return "";
String shortest=strs[0];
for(String s: strs){
if(s.isEmpty()) return "";
if(s.length()
shortest = s;
}
int length = shortest.length();
while(true){
b... 阅读全帖 |
|
c*u 发帖数: 22 | 40 一、用 HashSet 和 LinkedHashSet
String str = "cbacbbbfa";
HashSet set = new HashSet();
LinkedHashSet linkSet = new LinkedHashSet();
int len = str.length();
for (int i=0;i
char ch = str.charAt( i );
if (set.contains( ch ))
linkSet.remove( ch );
else{
set.add( ch );
linkSet.add( ch );
}
}
System.out.println( linkSet.iterator().next() );
二、用 HashSet 和 LinkedList
String str = "cbacbbbfa";
HashSet set = n... 阅读全帖 |
|
t******i 发帖数: 483 | 41 public static void permutation(String prefix, String str) {
int n = str.length();
if (n == 0)
System.out.println(prefix);
else {
for (int i = 0; i < n; i++) {
permutation(prefix + str.charAt(i), str.substring(0, i)
+ str.substring(i + 1, n));
}
}
} |
|
c********t 发帖数: 5706 | 42 多谢!
第一题最后发现用 char array 比 StringBuilder还快
第二题又超时了,再求帮助!
用的是双queue解法,感觉比你和wwwyhs说的hashmap>用空间
更少,时间也应该更少,为啥又超呢?(唉,我为什么又说又)
public ArrayList> findLadders(String start, String end,
HashSet dict) {
// Start typing your Java solution below
// DO NOT write main() function
ArrayList> ret = new ArrayList>(
);
int curr=1, next=0, count=1, n=start.length(), length=Integer.MAX_
VALUE... 阅读全帖 |
|
c********t 发帖数: 5706 | 43 多谢!
第一题最后发现用 char array 比 StringBuilder还快
第二题又超时了,再求帮助!
用的是双queue解法,感觉比你和wwwyhs说的hashmap>用空间
更少,时间也应该更少,为啥又超呢?(唉,我为什么又说又)
public ArrayList> findLadders(String start, String end,
HashSet dict) {
// Start typing your Java solution below
// DO NOT write main() function
ArrayList> ret = new ArrayList>(
);
int curr=1, next=0, count=1, n=start.length(), length=Integer.MAX_
VALUE... 阅读全帖 |
|
g********E 发帖数: 178 | 44 想替换末位字符,目前写的是:
str.pop_back();
str.push_back(char);
试图用replace,但是似乎没有替换单一字符的选项,试了下面这个不work,
str.replace(str.end(),str.end(),"char")
想问下到底能不能用replace,应该怎么用呢? |
|
J****3 发帖数: 427 | 45 char *compress(char* str){
int rlen;
int len = strlen(str);
char* dest = (char*)malloc(sizeof(char)*(2*len+1));
int j = 0;
for(int i = 0; i < len; i++){
dest[j++] = str[i];
rlen = 1;
while(i+1 < len && str[i] == str[i+1]){
rlen++;
i++;
}
dest[j++] = rlen+'0';
}
dest[j] = '\0';
return dest;
}
O(n) 但是不是inplace的 你看看行不 |
|
a******e 发帖数: 710 | 46 我觉得30分钟做出这两道题很不简单啊。
不过这个循环的判断应该是小于等于号吧?
for (int i = 1; i <= str.size(); ++i)
nPermute *= i;
string correspPermute(string& str, int index)
{
set table;
for (auto& c : str)
table.insert(c);
int nPermute = 1;
for (int i = 1; i < str.size(); ++i)
nPermute *= i;
string res;
--index;
for (int m = index; m >= 0; --m) // 这里不应该是index应该是str.size()
{
nPermute /= m;
int idx = index / nPermute;
auto iter = table.... 阅读全帖 |
|
j*********6 发帖数: 407 | 47 我是用DFS,和memorized 再加上 二爷指导的 pruning, 代码如下 不够感觉写得有些
麻烦 有什么问题请大家慷慨指出
顺便求教这种问题怎么分析时间复杂度
public class Solution {
public ArrayList wordBreak(String s, Set dict) {
// Note: The Solution object is instantiated only once and is reused
by each test case.
// 1. get the min and max length of words in dictionary, used for
pruning.
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for(String str : dict){
min = Math.min(min, str... 阅读全帖 |
|
p*********y 发帖数: 17 | 48 优化一下就能过。
==================================================
public class Solution {
public ArrayList wordBreak(String s, Set dict) {
int N = s.length();
ArrayList result = new ArrayList();
if (N == 0) return result;
int maxLen = 0;
for (String str : dict) {
maxLen = Math.max(maxLen, str.length());
}
StringBuilder buffer = new StringBuilder();
HashSet invalid = new HashSet阅读全帖 |
|
P**********k 发帖数: 1629 | 49 #include
#include
using namespace std;
void reverseWords(const string str_in, string &str_out, int length){
int i=0, j=0;
while(i
if(!is_letter(str_in, i)){
str_out[j++] = str_in[i++];
}else{
int start = i;
while(is_letter(str_in, i) && i
i++;
}
int end = i-1;
//reverse copying
for(int k=end; k>=start; k--){
... 阅读全帖 |
|
s***e 发帖数: 403 | 50 我也给个解。
这个题目的关键其实是两个字符之间的bitwise roll。因为要检验的只有8个bits。所
以只要每次取两个字符c1和c2,然后依次roll bits即可。
int countPattern2(char c1, char c2, char pattern)
{
int count = 0;
static const char mask = (1 << 7);
int i;
for(i = 0; i < 8; ++i)
{
if (c1 == pattern)
++count;
c1 <<= 1;
c1 += ((c2 & mask) ? 1 : 0);
c2 <<= 1;
}
return count;
}
int countPattern(const char* str, char pattern)
{
const s_length = strlen(str);
int i;
int count = 0... 阅读全帖 |
|