Redian新闻
>
leetcode的Longest Substring Without Repeating Characters解法好麻烦啊
avatar
leetcode的Longest Substring Without Repeating Characters解法好麻烦啊# JobHunting - 待字闺中
p*3
1
http://leetcode.com/2011/05/longest-substring-without-repeating
丢个简单的:
class Solution {
public:
int lengthOfLongestSubstring(string s) {

unordered_map mp;
int ret = 0;
int beg = 0;

for (int i = 0; i < s.length(); i++)
{
if (mp.find(s.at(i)) != mp.end() && mp[s.at(i)] >= beg)
beg = mp[s.at(i)] + 1;

mp[s.at(i)] = i;
ret = max(ret, i - beg + 1);
}

return ret;
}
};
文康,要不给改改?
avatar
r*h
2
这思路不错,赞
我觉得hash直接用数组就可以了
int hash[256];
for(int i=0; i<256; i++) hash[i] = -1;

【在 p*****3 的大作中提到】
: http://leetcode.com/2011/05/longest-substring-without-repeating
: 丢个简单的:
: class Solution {
: public:
: int lengthOfLongestSubstring(string s) {
:
: unordered_map mp;
: int ret = 0;
: int beg = 0;
:

avatar
p*3
3

这么做要是被用java的人面就会说要优化一下,
问半天原来是用hashmap,这算啥优化,学乖了直接用hashmap了

【在 r**h 的大作中提到】
: 这思路不错,赞
: 我觉得hash直接用数组就可以了
: int hash[256];
: for(int i=0; i<256; i++) hash[i] = -1;

avatar
r*h
4
晕。。。
我的理解是频繁的call成员函数不是开销更大了嘛,虽然空间上是省了一点儿不过256
个int也不是啥大事吧还是O(1)
看来和面试官思路不同真的挺悲剧的

【在 p*****3 的大作中提到】
:
: 这么做要是被用java的人面就会说要优化一下,
: 问半天原来是用hashmap,这算啥优化,学乖了直接用hashmap了

avatar
l*7
5
public static int find (String s){
Map hm = new HashMap();
char[] chars = s.toCharArray();
int length = 0;
for(int i = 0; i < chars.length; i++){
if (!hm.containsKey(chars[i])){
hm.put(chars[i], i);
length++;
}
else{
int tmp = i - hm.get(chars[i]);
if (tmp > length) length = tmp;
hm.put(chars[i], i);
}
}
return length;
}
avatar
z*e
6
数组容易越界,而且不易维护,不易扩展
map可以写得很通俗易懂
比如
map.put(1,"1");
map.put(2,"2");
……
这样一串下来,傻子都能看懂
再比如同一个对象的重用,你要remove所有value
map.clear就搞定了,数组就要自己去实现了,多半要循环一下
而循环在多线程环境中极容易出一些并发修改的异常

256

【在 r**h 的大作中提到】
: 晕。。。
: 我的理解是频繁的call成员函数不是开销更大了嘛,虽然空间上是省了一点儿不过256
: 个int也不是啥大事吧还是O(1)
: 看来和面试官思路不同真的挺悲剧的

avatar
z*e
7
写得很好
static,接口的使用,循环的定义,contiainsKey方法的使用
这些非常漂亮滴细节可以看出作者的水平
跟这样的程序猿一起干活,工作会比较愉快

【在 l********7 的大作中提到】
: public static int find (String s){
: Map hm = new HashMap();
: char[] chars = s.toCharArray();
: int length = 0;
: for(int i = 0; i < chars.length; i++){
: if (!hm.containsKey(chars[i])){
: hm.put(chars[i], i);
: length++;
: }
: else{

avatar
s*e
8
没明白,遇到有重复元素的时候,hm里边部分元素不用清掉?

【在 l********7 的大作中提到】
: public static int find (String s){
: Map hm = new HashMap();
: char[] chars = s.toCharArray();
: int length = 0;
: for(int i = 0; i < chars.length; i++){
: if (!hm.containsKey(chars[i])){
: hm.put(chars[i], i);
: length++;
: }
: else{

avatar
l*7
9
hm.put一个新value的以后旧的就被替换掉了。

【在 s*******e 的大作中提到】
: 没明白,遇到有重复元素的时候,hm里边部分元素不用清掉?
avatar
l*7
10
谢谢夸奖,那天刚好看见就写了一下。
我还在找工作啊

【在 z****e 的大作中提到】
: 写得很好
: static,接口的使用,循环的定义,contiainsKey方法的使用
: 这些非常漂亮滴细节可以看出作者的水平
: 跟这样的程序猿一起干活,工作会比较愉快

avatar
r*h
11
谢谢建议
是不是说能用接口的时候用接口比较好呢?
比如说Queue, Map, Deque这些?

【在 z****e 的大作中提到】
: 写得很好
: static,接口的使用,循环的定义,contiainsKey方法的使用
: 这些非常漂亮滴细节可以看出作者的水平
: 跟这样的程序猿一起干活,工作会比较愉快

avatar
s*e
12
不行吧?例如 abcba 当读到第二个b的时候不应该把第一个a也清掉吗?这时候是从c开
始算最长的吧

【在 l********7 的大作中提到】
: hm.put一个新value的以后旧的就被替换掉了。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。