題目:
remove '<','>' in ""?
"" -> "******"
"******>" -> "******>"
""" -> "xx>>" -> "***"
題目解讀:要求程式設計將乙個字串中首尾配對的<>去掉。如"" -> "zhongsan hu"
有兩種解法:
1、採用遞迴演算法。先比較首尾是否配對,如果不配對則列印出整個佇列,如果配對,則去掉首尾,再對子佇列繼續進行遞迴計算。(遍歷次數多,效率偏低)
2、計算首部'<'個數,再計算尾部'>'個數,然後得到這兩都的最小值,根據佇列的長度及這首尾兩個數的最小值,可以得到所需要的佇列。
解法一原始碼如下:
-module(test).
-export([remove/1]).
remove(l) when is_list(l) =:= true ->
remove_pair(l, "<", ">");
remove(_l) -> "argument error: you should test a list!".
%% 遞迴刪除列表中首尾配對的兩個元素
remove_pair(l, head, end) ->
case check_list_tail_end(l, end) of
true when [hd(l)] =:= head
-> remove_pair(remove_list_head_and_tail(l), head, end);
_other -> l
end.
%% 刪除列表的頭尾兩個元素
remove_list_head_and_tail(l) when length(l) >= 2 ->
remove_list_head_and_tail(tl(l), );
remove_list_head_and_tail(_l) -> .
remove_list_head_and_tail([_h|t], result) when t =:= ->
lists:reverse(result);
remove_list_head_and_tail([h|t], result) when t =/=
-> remove_list_head_and_tail(t,[h|result]).
%%判斷尾部
check_list_tail_end([h|t], compareendlist) when h =/= ->
if t =:= ,[h] =:= compareendlist -> true;
t =:= ,[h] =/= compareendlist -> false;
t =/= -> check_list_tail_end(t, compareendlist)
end;
check_list_tail_end(l, _) when l =:= -> false.
解法二原始碼如下:
-module(test).
-export([remove/1]).
remove() -> ;
remove(l) ->
remove(l, $<, $>).
remove(l, head, end) ->
headcount = get_headcount(l, head),
endcount = get_endcount(l, end),
totalcount = length(l),
remove_headend(l, min(headcount, endcount),totalcount).
get_headcount(l, head) ->
get_headcount(l, head, 0).
get_headcount([h|t], head, count) ->
if t =:= , h =:= head -> count+1;
t =:= , h =/= head -> count;
head =/= h -> count;
head =:= h -> get_headcount(t, head, count+1);
true -> erlang:error("get_headcount error")
end.
get_endcount(l, end) ->
get_endcount(l, end, 0).
get_endcount([h|t], end, count) ->
if t =:= , h =:= end -> count+1;
t =:= , h =/= end -> 0;
h =:= end -> get_endcount(t, end, count+1);
h =/= end -> get_endcount(t, end, 0);
true -> erlang:error("get_endcount error")
end.
remove_headend(l, count,totalcount) ->
l1 = cut_head(l, count),
l2 = cut_end(l1, totalcount-2*count),
lists:reverse(l2).
cut_head(l, count) ->
cut_head(l, count, ).
cut_head(, _count, _l) -> ;
cut_head([h|t], count, l) ->
if
count =/= 0 -> cut_head(t, count-1, [h|l]);
true -> [h|t]
end.
cut_end(l, reservecount) ->
cut_end(l, reservecount, ).
cut_end(, _reservecount, resultlist) -> resultlist;
cut_end([h|t], reservecount, resultlist) ->
if reservecount =/= 0 -> cut_end(t, reservecount-1, [h|resultlist]);
true -> resultlist
end.
測試:"" -> "******"
"******>" -> "******>"
""" -> "xx>>>>" -> "hzhsan>"
騰訊的一道測試題
有36輛電單車6個賽道,在沒有計時器的情況下,如果要選出跑的最快的三輛車,至少需要幾次比賽?我最初的想法是 要選出最快的三輛車,先讓這36輛車分成6組,每一組比一下,選出每一組的第一名,然後讓這6個第一名比一次,選出前三名就行了,果斷的選擇了7次,顯然這是錯誤的 這個題和田忌賽馬有那麼一點點的相似,...
再試答一道招聘測試題 關於「客戶即上帝」理解
古人曰 冠雖敝,禮加之於首 履雖新,法踐行於地 請你 a 把這句古語譯成白話文,b 此句最早出自何處?歷史上哪幾個主要人物說過這樣的話。c 結合 客戶即上帝 的現代觀念,談談你對這句古語的理解。說來慚愧,我是理工科出身,古文功底不是很好,這句話也是第一次遇到,經過在網上查詢,才有如下一點結果。經查,...
試著解一道騰訊面試題
帖子問題 同學去面試的 1 設計乙個魔方 六面 的程式。2 有一千萬條簡訊,有重複,以文字檔案的形式儲存,一行一條,有重複。請用5分鐘時間,找出重複出現最多的前10條。3 收藏了1萬條url,現在給你一條url,如何找出相似的url。面試官不解釋何為相似 想了一中午,寫了一下午 真服了自己,這麼鑽牛...