C++ code:判斷字符串相等


如果兩個字符串中0和1的個數分別相等,則稱該對字符串為相等。

 

方法一:

由於string類對於讀取文件中子串以及比較都很方便,所以,用string類的對象來逐對存放字串,然后將字串分別排序后對其進行比較是直接的思路。

 1 #include<iostream>
 2 #include<fstream>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     ifstream in("string.txt");
 9     for (string s, t; in >> s >> t;)
10     {
11         sort(s.begin(),s.end);
12         sort(t.begin(),t.end);
13         cout << (s==t?"yes\n":"no\n");
14     }
15 }

程序中用到了算法sort調用,所以要包含算法庫頭文件algorithm。

 

方法二:

基本的排序算法需要對所有元素進行兩重循環的操作,最快的排序算法也需要O(nlogn)數量級的運算次數,然而,如果僅對字串分別數一下1和0的個數,再比較其個數值,效率會更高:

 1 #include<iostream>
 2 #include<fstream>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     ifstream in("string.txt");
 9     for (string s, t; in >> s >> t;)
10     {
11         int sc1 = count(s.begin(), s.end(),'1');
12         int sc0 = count(s.begin(), s.end(), '0');
13         int tc1 = count(t.begin(), t.end(), '1');
14         int tc0 = count(t.begin(), t.end(), '0');
15         cout << (sc1==tc1&&sc0==tc0?"yes\n":"no\n");
16     }
17 }

count計數也包含在C++標准庫中,由於count算法只有一重循環的處理時間,雖然程序中有4次count調用,但比較排序算法,對於元素個數激增時,其效率能明顯體現出來。當然有些讀者可能看到了還能對其做進一步優化:count算法是線性的,無論如何,一重循環是不可避免的。

 

方法三:

根據問題描述,字串中非1即0, so,“0”的個數在總長度已知的情況下,可以不使用count算法,通過並列地判斷總長度的相等性而直接得到:

 1 #include<iostream>
 2 #include<fstream>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     ifstream in("string.txt");
 9     for (string s, t; in >> s >> t;)
10     {
11         int s1 = count(s.begin(), s.end(), '1');
12         int t1 = count(t.begin(), t.end(), '1');
13         cout << (s1==t1&&s.length()==t.length()?"yes\n":"no\n");
14     }
15 }

總結:

上述程序不但在語句行上縮減了兩行,更重要的是通過代碼優化而提高了效率

提高程序運行的效率,在編程階段主要有三個途徑:

(1)吃透問題,采用合理的方案設計;

(2)采用盡可能有效的算法;

(3)采用合理的程序結構、內存布局和代碼優化。

上述三者是相輔相成的,你中有我,我中有你。吃透了問題實質,才能合理選擇算法;采用更有效的算法,才能實現代碼優化;代碼優化本身,又是對問題的確切把握。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM