最長重復子串和最長不重復子串求解

最長重復子串和最長不重復子串求解

本文內容框架:

§1 最長重復子串

基本方法、KMP算法求解、后綴數組求解

§2 最長不重復子串

基本方法、動態規劃、動態規劃+Hash

§3 小結

?

§1最長重復子串

?

1.1問題描述

?

首先這是一個單字符串問題。子字符串R 在字符串L 中至少出現兩次,則稱R 是L 的重復子串。重復子串又分為可重疊重復子串和不可重疊重復子串。

?

1.2基本方法

?

枚舉子串,讓子串和子串進行比較。直接看代碼:

C代碼 ?收藏代碼
  1. /*?最長重復子串?Longest?Repeat?Substring?*/??
  2. ???
  3. int?maxlen;????/*?記錄最長重復子串長度?*/??
  4. int?maxindex;??/*?記錄最長重復子串的起始位置?*/??
  5. void?outputLRS(char?*?arr);??/*?輸出LRS?*/??
  6. ???
  7. /*?最長重復子串?基本算法?*/??
  8. int?comlen(char?*?p,?char?*?q)??
  9. {??
  10. ????int?len?=?0;??
  11. ????while(*p?&&?*q?&&?*p++?==?*q++)??
  12. ????{??
  13. ????????++len;??
  14. ????}??
  15. ????return?len;??
  16. }??
  17. ???
  18. void?LRS_base(char?*?arr,?int?size)??
  19. {??
  20. ????for(int?i?=?0;?i?<?size;?++i)??
  21. ????{??
  22. ????????for(int?j?=?i+1;?j?<?size;?++j)??
  23. ????????{??
  24. ????????????int?len?=?comlen(&arr[i],&arr[j]);??
  25. ????????????if(len?>?maxlen)??
  26. ????????????{??
  27. ????????????????maxlen?=?len;??
  28. ????????????????maxindex?=?i;??
  29. ????????????}??
  30. ????????}??
  31. ????}??
  32. ????outputLRS(arr);??
  33. }??

?╝①

優化思路

一般的優化方法就是在充分利用已有的結果,最長重復子串的長度增加一定是建立在之前已經找到的重復子串之上的,充分利用已找到的重復子串的位置和長度是優化的一個重點,此外還有就是未不是重復子串的,以后就不會被包含在重復子串內,如"ab"只有一個,則重復子串就不能包含"ab"(允許重疊的重復子串例外)。

?

1.2KMP算法求解

?

對KMP算法還不是很了解的,可以查看我的另一篇博文(不懂猛點),在KMP算法的關鍵就是求解next數組,針對next[j]=k,可以得到P[0,1,...,k-1]=P[j-k,j-k+1,...,j-1]。看到P[0,1,...,k-1]=P[j-k,j-k+1,...,j-1]應該會眼前一亮,大腦頓時清醒些,這不就是重復子串嗎!由此求解最長重復子串就轉化為求解KMP算法next數組中的最大值(即max{next[j]=k}。

現在就是求解next數組的問題了,還是直接查看代碼:

?

C代碼 ?收藏代碼
  1. int?getNext(char?*str,int?*next)??
  2. {??
  3. ????int?len=strlen(str);??
  4. ????int?index=0;??
  5. ????int?k=-1;??
  6. ????next[0]=k;??
  7. ????int?max=0;??
  8. ??
  9. ????//kmp算法求next值,取得最大的字串??
  10. ????while?(index<len)??
  11. ????{??
  12. ????????if?(k==-1?||?str[index]==str[k])??
  13. ????????{??
  14. ????????????k++;??
  15. ????????????index++;??
  16. ????????????next[index]=k;??
  17. ????????????if?(k>max)//求得其中重復最大的字串的個數,也就是與最前面串的重復數??
  18. ????????????{??
  19. ????????????????max=k;??
  20. ????????????}??
  21. ????????}??
  22. ????????else??
  23. ????????????k=next[k];??
  24. ????}??
  25. ??
  26. ????return?max;??
  27. }??
  28. ??
  29. int?main()??
  30. {??
  31. ????char?str[50];//輸入字符串??
  32. ????cin>>str;??
  33. ????int?max=0;//最大的字串??
  34. ????int?nextMax;//接受getNext函數中返回的最大值??
  35. ????int?index;??
  36. ????int?maxIndex;//保存最大的字串起始位置??
  37. ????int?len=strlen(str);??
  38. ????//將一個字符串從開始一直減少到只剩一個字符,通過這個取得最小字串??
  39. ????for?(index=0;index<len-1;index++)??
  40. ????{??
  41. ????????int?*next=new?int[len-index];//取得next在這沒用??
  42. ????????nextMax=getNext(str+index,next);//每次從str+index開始??
  43. ????????if?(nextMax>max)??
  44. ????????{??
  45. ????????????max=nextMax;??
  46. ????????????maxIndex=index;??
  47. ????????}??
  48. ????}??
  49. ??????
  50. ????//輸出最長字串??
  51. ????cout<<"最長字串:?";??
  52. ????for?(index=0;index<max;index++)??
  53. ????{??
  54. ????????cout<<str[index+maxIndex];??
  55. ????}??
  56. ????cout<<endl;??
  57. ??????
  58. ????return?0;??
  59. }??

╝②?

?

1.3后綴數組求解

?

后綴數組在我的另外一篇博文有介紹,還沒有概念的可以移步查看點擊。后綴數組就是保留字符串所有位置到字符串末尾的子字符串,a[i]就是第i位置到末尾的子串。有了后綴數組,對后綴數組進行排序,然后進行求后綴數組相鄰元素的最大前綴就是最大重復子串。

?

Cpp代碼 ?收藏代碼
  1. #include?<iostream>??
  2. ?using?namespace?std;??
  3. ????
  4. ?const?int?MAXN?=?1000;??
  5. ??
  6. ?int?mycmp(const?void*?p1,?const?void*?p2)??
  7. ?{??
  8. ?????return?strcmp(*(char*?const*)p1,?*(char*?const*)p2);??
  9. ?}??
  10. ???
  11. ?int?getLen(char*?p,?char*?q)??
  12. ?{??
  13. ?????int?ret?=?0;??
  14. ?????while?(*p?&&?*p++?==?*q++)??
  15. ?????{??
  16. ?????????++ret;??
  17. ?????}??
  18. ?????return?ret;??
  19. ?}??
  20. ???
  21. ?char*?foo(char?result[],?char?s[])??
  22. ?{??
  23. ?????int?len?=?strlen(s);??
  24. ?????char**?suffix?=?new?char*[len];??
  25. ?????for?(int?i?=?0;?i?<?len;?++i)??
  26. ?????{??
  27. ?????????suffix[i]?=?s?+?i;??
  28. ?????}??
  29. ?????qsort(suffix,?len,?sizeof?(char*),?mycmp);??
  30. ?????//for?(int?i?=?0;?i?<?len;?++i)??
  31. ?????//{??
  32. ?????//????cout?<<?suffix[i]?<<?endl;??
  33. ?????//}??
  34. ?????int?maxlen?=?0,?maxi?=?0,?maxj?=?0,?temp?=?0;??
  35. ?????for?(int?i?=?0;?i?<?len?-?1;?++i)??
  36. ?????{??
  37. ?????????temp?=?getLen(suffix[i],?suffix[i?+?1]);??
  38. ?????????if?(temp?>?maxlen)??
  39. ?????????{??
  40. ?????????????maxlen?=?temp;??
  41. ?????????????maxi?=?i;??
  42. ?????????????maxj?=?i?+?1;??
  43. ?????????}??
  44. ?????}??
  45. ?????//cout?<<?maxlen?<<?endl;??
  46. ?????//cout?<<?suffix[maxi]?<<?endl;??
  47. ?????//cout?<<?suffix[maxj]?<<?endl;??
  48. ?????//printf("%.*s\n",?maxlen,?suffix[maxi]);??
  49. ?????for?(int?i?=?0;?i?<?maxlen;?++i)??
  50. ?????{??
  51. ?????????result[i]?=?suffix[maxi][i];??
  52. ?????}??
  53. ?????result[maxlen]?=?'\0';??
  54. ?????return?result;??
  55. ?}??
  56. ???
  57. ?int?main()??
  58. ?{??
  59. ?????char?s[MAXN];??
  60. ?????char?result[MAXN];??
  61. ?????while?(cin?>>?s)??
  62. ?????{??
  63. ?????????cout?<<?foo(result,?s)?<<?endl;??
  64. ?????}??
  65. ?????return?0;??
  66. }??

?

╝③

§2最長不重復子串?

2.1問題描述

?

從一個字符串中找到一個連續子串,該子串中任何兩個字符不能相同,求子串的最大長度并輸出一條最長不重復子串。

下面介紹四種方法逐步優化,時間復雜度從O(n2)到O(n)。

?

2.2基本算法(使用hash)

?

要求子串中的字符不能重復,判重問題首先想到的就是hash,尋找滿足要求的子串,最直接的方法就是遍歷每個字符起始的子串,輔助hash,尋求最長的不重復子串,由于要遍歷每個子串故復雜度為O(n^2),n為字符串的長度,輔助的空間為常數hash[256]。

?

C代碼 ?收藏代碼
  1. /*?最長不重復子串?設串不超過30?
  2. ?*?我們記為?LNRS?
  3. ?*/??
  4. int?maxlen;??
  5. int?maxindex;??
  6. void?output(char?*?arr);??
  7. ???
  8. /*?LNRS?基本算法?hash?*/??
  9. char?visit[256];??
  10. ???
  11. void?LNRS_hash(char?*?arr,?int?size)??
  12. {??
  13. ????int?i,?j;??
  14. ????for(i?=?0;?i?<?size;?++i)??
  15. ????{??
  16. ????????memset(visit,0,sizeof?visit);??
  17. ????????visit[arr[i]]?=?1;??
  18. ????????for(j?=?i+1;?j?<?size;?++j)??
  19. ????????{??
  20. ????????????if(visit[arr[j]]?==?0)??
  21. ????????????{??
  22. ????????????????visit[arr[j]]?=?1;??
  23. ????????????}else??
  24. ????????????{??
  25. ????????????????if(j-i?>?maxlen)??
  26. ????????????????{??
  27. ????????????????????maxlen?=?j?-?i;??
  28. ????????????????????maxindex?=?i;??
  29. ????????????????}??
  30. ????????????????break;??
  31. ????????????}??
  32. ????????}??
  33. ????????if((j?==?size)?&&?(j-i?>?maxlen))??
  34. ????????{??
  35. ????????????maxlen?=?j?-?i;??
  36. ????????????maxindex?=?i;??
  37. ????????}??
  38. ????}??
  39. ????output(arr);??
  40. }??

?

2.3動態規劃求解

?

動態規劃思想就是用于處理有重疊問題的求解,最大不重復子串一定是兩個相同字符夾著的一段字符串加上這個字符,如abcac這里的最大不重復子串是a夾的一段。

當一個最長子串結束時(即遇到重復的字符),新的子串的長度是與第一個重復的字符的下標有關的,如果該下標在上一個最長子串起始位置之前,則dp[i] = dp[i-1] + 1,即上一個最長子串的起始位置也是當前最長子串的起始位置;如果該下標在上一個最長子串起始位置之后,則新的子串是從該下標之后開始的。簡短幾句話可能講不是很明白,不過好在有程序可以幫助理解,慣例下面附上程序:

C代碼 ?收藏代碼
  1. /*?LNRS?dp?*/??
  2. int?dp[30];??
  3. ???
  4. void?LNRS_dp(char?*?arr,?int?size)??
  5. {??
  6. ????int?i,?j;??
  7. ????int?last_start?=?0;?????//?上一次最長子串的起始位置??
  8. ????maxlen?=?maxindex?=?0;??
  9. ???
  10. ????dp[0]?=?1;??
  11. ????for(i?=?1;?i?<?size;?++i)??
  12. ????{??
  13. ????????for(j?=?i-1;?j?>=?last_start;?--j)?//?遍歷到上一次最長子串起始位置??
  14. ????????{??
  15. ????????????if(arr[j]?==?arr[i])??
  16. ????????????{??
  17. ????????????????dp[i]?=?i?-?j;??
  18. ????????????????last_start?=?j+1;?//?更新last_start??
  19. ????????????????break;??
  20. ????????????}else?if(j?==?last_start)?//?無重復??
  21. ????????????{??
  22. ????????????????dp[i]?=?dp[i-1]?+?1;??
  23. ????????????}??
  24. ????????}??
  25. ????????if(dp[i]?>?maxlen)??
  26. ????????{??
  27. ????????????maxlen?=?dp[i];??
  28. ????????????maxindex?=?i?+?1?-?maxlen;??
  29. ????????}??
  30. ????}??
  31. ????output(arr);??
  32. }??

2.4動態規劃+Hash求解

上面動態規劃求解時間復雜度還是O(n2),主要是還是進行“回頭”查找了重復元素位置,其實,上面并不是真正的動態規劃方法,因為上面的求解過程沒有記錄有用的結果,所以可以通過記錄之前出現的下標來改進算法,這樣就不用每次都回去查找重復元素位置,這其實才是真正的動態規劃方法,只是記錄結果是用的Hash,這樣的時間復雜度就是O(n)。

?

C代碼 ?收藏代碼
  1. /*?LNRS?dp?+?hash?記錄下標?*/??
  2. void?LNRS_dp_hash(char?*?arr,?int?size)??
  3. {??
  4. ????memset(visit,?-1,?sizeof?visit);??
  5. ????memset(dp,?0,?sizeof?dp);??
  6. ????maxlen?=?maxindex?=?0;??
  7. ????dp[0]?=?1;??
  8. ????visit[arr[0]]?=?0;??
  9. ????int?last_start?=?0;??
  10. ???
  11. ????for(int?i?=?1;?i?<?size;?++i)??
  12. ????{??
  13. ????????if(visit[arr[i]]?==?-1)??
  14. ????????{??
  15. ????????????dp[i]?=?dp[i-1]?+?1;??
  16. ????????????visit[arr[i]]?=?i;?/*?記錄字符下標?*/??
  17. ????????}else??
  18. ????????{??
  19. ????????????if(last_start?<=?visit[arr[i]])??
  20. ????????????{??
  21. ????????????????dp[i]?=?i?-?visit[arr[i]];??
  22. ????????????????last_start?=?visit[arr[i]]?+?1;??
  23. ????????????????visit[arr[i]]?=?i;?/*?更新最近重復位置?*/??
  24. ????????????}else??
  25. ????????????{??
  26. ????????????????dp[i]?=?dp[i-1]?+?1;??
  27. ????????????}??
  28. ???
  29. ????????}??
  30. ????????if(dp[i]?>?maxlen)??
  31. ????????{??
  32. ????????????maxlen?=?dp[i];??
  33. ????????????maxindex?=?i?+?1?-?maxlen;??
  34. ????????}??
  35. ????}??
  36. ????output(arr);??
  37. }??

?

?進一步優化

上面的程序因為輔助的空間多了,是不是還能優化,仔細看DP最優子問題解的更新方程:

dp[i] = dp[i-1] + 1;

dp[i-1]不就是更新dp[i]當前的最優解么?這與最大子數組和問題的優化幾乎同出一轍,我們不需要O(n)的輔助空間去存儲子問題的最優解,而只需O(1)的空間就可以了,至此,我們找到了時間復雜度O(N),輔助空間為O(1)(一個額外變量與256大小的散列表)的算法,代碼如下:

注意:當前最長子串的構成是與上一次最長子串相關的,故要記錄上一次最長子串的起始位置!

?

C代碼 ?收藏代碼
  1. /*?LNRS?dp?+?hash?優化?*/??
  2. void?LNRS_dp_hash_impro(char?*?arr,?int?size)??
  3. {??
  4. ????memset(visit,?-1,?sizeof?visit);??
  5. ????maxlen?=?maxindex?=?0;??
  6. ????visit[arr[0]]?=?0;??
  7. ????int?curlen?=?1;??
  8. ????int?last_start?=?0;??
  9. ???
  10. ????for(int?i?=?1;?i?<?size;?++i)??
  11. ????{??
  12. ????????if(visit[arr[i]]?==?-1)??
  13. ????????{??
  14. ????????????++curlen;??
  15. ????????????visit[arr[i]]?=?i;?/*?記錄字符下標?*/??
  16. ????????}else??
  17. ????????{??
  18. ????????????if(last_start?<=?visit[arr[i]])??
  19. ????????????{??
  20. ????????????????curlen?=?i?-?visit[arr[i]];??
  21. ????????????????last_start?=?visit[arr[i]]?+?1;??
  22. ????????????????visit[arr[i]]?=?i;?/*?更新最近重復位置?*/??
  23. ????????????}else??
  24. ????????????{??
  25. ????????????????++curlen;??
  26. ????????????}??
  27. ????????}??
  28. ????????if(curlen?>?maxlen)??
  29. ????????{??
  30. ????????????maxlen?=?curlen;??
  31. ????????????maxindex?=?i?+?1?-?maxlen;??
  32. ????????}??
  33. ????}??
  34. ????output(arr);??
  35. }??

?

?最后在給出測試用例

?

C代碼 ?收藏代碼
  1. /*?輸出LNRS?*/??
  2. void?output(char?*?arr)??
  3. {??
  4. ????if(maxlen?==?0)??
  5. ????{??
  6. ????????printf("NO?LNRS\n");??
  7. ????}??
  8. ????printf("The?len?of?LNRS?is?%d\n",maxlen);??
  9. ???
  10. ????int?i?=?maxindex;??
  11. ????while(maxlen--)??
  12. ????{??
  13. ????????printf("%c",arr[i++]);??
  14. ????}??
  15. ????printf("\n");??
  16. }??
  17. ???
  18. void?main()??
  19. {??
  20. ?????char?arr[]?=?"abcaacdeabacdefg";??
  21. ???
  22. ?????/*?LNRS?基本算法?*/??
  23. ?????LNRS_hash(arr,strlen(arr));??
  24. ???
  25. ?????/*?LNRS?dp?*/??
  26. ?????LNRS_dp(arr,strlen(arr));??
  27. ???
  28. ?????/*?LNRS?dp?+?hash?記錄下標?*/??
  29. ?????LNRS_dp_hash(arr,strlen(arr));??
  30. ???
  31. ?????/*?LNRS?dp?+?hash?優化方案?*/??
  32. ?????LNRS_dp_hash_impro(arr,strlen(arr));??
  33. }??

?╝④

?

§3 小結

這篇文章把字符串最長重復子串和最長不重復子串的求解方法,能有了一定的認識和理解,基本可以掌握這些方法。如果你有任何建議或者批評和補充,請留言指出,不勝感激,更多參考請移步互聯網。

?

?

參考:

勇幸|Thinking: http://www.ahathinking.com/archives/121.html

②huang12315: http://blog.csdn.net/huang12315/article/details/6455090

③unixfy: http://www.cppblog.com/unixfy/archive/2011/05/23/146986.html

勇幸|Thinking: http://www.ahathinking.com/archives/123.html

?


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450174.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450174.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450174.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sql 查詢結果為null替換 為 0

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 mysql : ifnull( xxx , 0 ) select ifnull(colname,0) from tablename oracle: NVL&#xff08;xxx , 0 )

前后端分離——token超時刷新策略

前言 記錄一下前后端分離下————token超時刷新策略&#xff01; 需求場景 昨天發了一篇記錄 前后端分離應用——用戶信息傳遞 中介紹了token認證機制&#xff0c;跟幾位群友討論了下&#xff0c;有些同學有這么一個疑惑&#xff1a;token失效了&#xff0c;應該怎么做&…

Android ImageView的scaleType(圖片比例類型)屬性與adjustViewBounds(調整視圖邊界)屬性

本文轉載自[Android ImageView的scaleType&#xff08;圖片比例類型&#xff09;屬性與adjustViewBounds&#xff08;調整視圖邊界&#xff09;屬性]并做了排版的修改(http://www.cnblogs.com/xzbc/p/5098347.html) Android ImageView的scaleType的屬性可設置為matrix&#xff…

阿里云@廣東:讓我們一起上云!

鍋爐故障預測 預警準確率95%以上 利用算法模型進行制程能力的 綜合分析與評估優化 提升定標效率 時間降低30% 構建垃圾焚燒發電工藝的優化算法模型 綜合考慮環保和設備負荷因素 推薦最優工藝參數組合 優化人工操作&#xff0c;提高燃燒效率 中海油能源發展公司 石油鉆探預測優化…

程序員的自我經營

程序員的自我經營之道第一層 從你決定邁出校門進入社會的那一刻起&#xff0c;你就進入了一個戰場&#xff0c;這個戰場雖然沒有硝煙彌漫&#xff0c;沒有炮火紛飛&#xff0c;但卻絕不亞于任何一個真正的戰場。你要在這個戰場上去搏殺&#xff0c;去競爭&#xff0c;利用各種…

P3966 [TJOI2013]單詞

\(\color{#0066ff}{ 題目描述 }\) 小張最近在忙畢設,所以一直在讀論文。一篇論文是由許多單詞組成但小張發現一個單詞會在論文中出現很多次,他想知道每個單詞分別在論文中出現了多少次。 \(\color{#0066ff}{輸入格式}\) 第一行一個整數N,表示有N個單詞。接下來N行每行一個單詞,…

Android應用開發—RecyclerView繪制蒙層

背景&#xff1a;如何在跨越兩個或兩個以上的item繪制一個view&#xff0c;該view需要跟隨recyclerView的滑動而整體移動。 Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);final View child …

排序_3

希爾排序:分組排序 是把記錄按下標的一定增量分組&#xff0c;對每組使用直接插入排序算法排序&#xff1b; 隨著增量逐漸減少&#xff0c;每組包含的關鍵詞越來越多&#xff0c;當增量減至1時&#xff0c;整個文件恰被分成一組&#xff0c;算法便終止。 def shell_sort(array)…

face++算法工程實習生面試

2018-01-11 算法工程實習生 自動化工具鏈方面 面試的知識點非常仔細&#xff0c;十分檢驗基本功底 1.自我介紹 2.算法題&#xff0c;leetcode 第一題 兩數之和 問python中數組和字典的查找時間復雜度 3.git git 4.linux 常用命令 cd - ,cd ,cd ~,cd / awk 讀取倒數第一行&a…

IDEA中怎么設置黑色或白色背景?

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 開啟軟件Intellij IDEA&#xff0c;在編輯框上面找到最前端的File。 點擊File&#xff0c;找到Setting&#xff0c;點擊進入。 然后在…

大公司體制內創新的困境

周末在家&#xff0c;隨手翻看了一點吳軍老師的《浪潮之巔》這本書。去年這本書上市之后我從頭到尾閱讀了一遍&#xff0c;在《浪潮之巔》中吳軍老師歷數了IT行業公司的興衰發展史&#xff0c;提出了一個令人印象深刻的“基因決定論”&#xff0c;即由于公司基因的影響&#xf…

java打印調用堆棧的方式

Log.d(TAG,Log.getStackTraceString(new Throwable()));

weblogic jprofile配置

前提&#xff1a; 1.安裝好weblogic 2.安裝好jprofile 非等待模式&#xff1a; export JAVA_OPTIONS"${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize100 -Dweblogic.threadpool.MaxPoolSize1000 -Djava.awt.headlesstrue -agentpath:/opt/jprofiler9/bin/linux-x64/l…

springboot/git學習資源記錄

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是記錄一下覺得不錯的資源&#xff1a; springboot: http://bbs.itmayiedu.com/article/1508826968799 http://blog.720ui.com/tags…

音視頻引擎研究

音視頻包&#xff1a;http://ishare.iask.sina.com.cn/f/33851582.html 1、WebRTC目的 WebRTC&#xff08;Web Real-Time Communication&#xff09;項目的最終目的主要是讓Web開發者能夠基于瀏覽器&#xff08;Chrome\FireFox\...&#xff09;輕易快捷開發出豐富的實時多媒體應…

我為什么“放棄”從事八年的嵌入式領域

由于嵌入式平臺性能所限&#xff0c;以及相應的開發平臺&#xff0c;工具&#xff0c;語言所限&#xff0c;導致很多前沿領域的軟件工程理論&#xff0c;方法無法實施&#xff0c;有些跟不上時代的感覺。 ……

Linux命令替換字符串

:%s/str1/str2/ 用str2替換str1 轉載于:https://www.cnblogs.com/haiyang21/p/10020503.html

人格差異

一.感知方式 感知是獲取感受的方式 感覺型【S】 S首先通過五官來直接感知事物。注意點在于當前的事實環境&#xff0c;而不是事實的來源。比如&#xff1a;雪融化了 因為太陽出來了&#xff0c;是事實。雪融化了&#xff0c;因為雪吸收太陽的熱量&#xff0c;達到自身融點&…

Hibernate @JoinTable 注解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 JoinTable支持的屬性 屬性是否必須說明name否指定該連接表的表名JoinColumns否該屬性值可接受多個JoinColumn&#xff0c;用于配置連接表…

潭州課堂25班:Ph201805201 django 項目 第三十九課 后臺 文章發布,圖片上傳到 FastDFS后端實現 七牛云講解(課堂筆記)...

文章發布&#xff1a; # 1&#xff0c;從前臺獲取參數# 2&#xff0c;校驗參數# 3&#xff0c;把數據保存到數據庫# 4&#xff0c;返回執行結果到前臺&#xff0c;&#xff08;創建成功或失敗&#xff09;自定義 froms.py 校驗參數 上傳圖片到七牛云 注冊 https://www.qiniu.c…