欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言算法打卡回文串驗證算法題解

 更新時間:2022年02月16日 10:55:43   作者:喬喬家的龍龍  
這篇文章主要為大家介紹了C語言算法打卡萬人千提的leetcode回文串的驗證算法題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

概念

所謂回文串,就是字符串反轉(zhuǎn)以后和原串相同,如 abba 和 lippil。對于回文串還是比較容易去驗證的,從字符數(shù)組的兩端開始向中間靠攏去驗證字符是否相等,但這里是否需要考慮字符數(shù)組長度的奇偶性呢?其實是不用的,下面一起來看看:

Leetcode例題:

1.回文串的驗證

2.有效回文

3.回文排列

(1,2題是一樣的,合并講解吧)

點殺回文排列

先講回文排列吧,簡單一點。首先我們的思路要清楚,無非就是找出相同的字符并統(tǒng)計他出現(xiàn)的次數(shù),我們保證每個字符只能出現(xiàn)偶數(shù)次,最多允許一個字符出現(xiàn)奇數(shù)個(奇數(shù)位字符串的中間元素)

代碼如下:

char Func(char* s)
{
	int  i, count = 0;
	int a[128] = { 0 };
	int sz = strlen(s);//計算字符數(shù)組長度來作為循環(huán)判斷部分
	for (i = 0; i < sz; i++)
	{
		a[s[i]]++;//統(tǒng)計相同字符出現(xiàn)次數(shù),有點像哈希表
	}
	for (i = 0; i < 128; i++)
	{
		if (a[i] % 2 == 1)//判斷出現(xiàn)次數(shù)是否為偶數(shù)
			count++;
		if (count >= 2)//判斷是否最多存在一個出現(xiàn)奇數(shù)次的元素
			return false;
	}
	return true;
}

注意,這里面有一些重要細節(jié):

1.數(shù)組 s 為 char 類型,字符數(shù)組在內(nèi)存中存儲方式是ASCII碼值,s[ i ]就是在一一列舉其中元素,假如我收到一個 ‘ a ’,a以ASCII碼值作為下標++,第二個‘ a ’找到后依然是用相同的ASCII碼值作為下標再++;這就是我統(tǒng)計數(shù)組中相同元素的次數(shù)的原理。

2. 數(shù)組初始化 a [128]不能更改是因為ASCII碼值一共是128個,0~127。

3.強調(diào)最多一位為奇數(shù)次出現(xiàn)的字符的特殊情況。

點殺回文驗證(有效性)

這道題就是典型的指針對撞題,因為題目告訴考慮數(shù)字和字符,我們寫的時候就可以不考慮字符的大小寫,這種方法需要靈活使用庫函數(shù)。

需要先判斷字符串中的字符是字母或數(shù)字,若不是,就pass掉。在 C 語言中可以用 isalnum() 函數(shù)去判斷。

忽略字母的大小寫,所以可以將待比較的字符轉(zhuǎn)化為小寫或大寫,然后再比較。在 C 語言中可以用 tolower() 和 toupper() 函數(shù)。

對撞指針

一根指針指向頭,滿足條件時,往右移動;一根指針指向尾,滿足條件時,往左移動;最后兩根指針相遇,循環(huán)條件一般是前下標(指針)小于后下標(指針)。

送上代碼:

char Fun(char * s)
{
    int left = 0, right = strlen(s) - 1;
    while (left < right) 
    {       //篩選出數(shù)字與字符
        if (!isalnum(s[left])) {
            left++; 
        } else if (!isalnum(s[right])) {
            right--;
        } else { //合并為小寫(大寫)來判斷
            if (tolower(s[left]) != tolower(s[right])) {
                return false;
            }            
            left++;
            right--;
        }
    }
    return true;
    }         

今天就到這里了家人們,先摸了。

以上就是C語言算法打卡回文串驗證算法題解的詳細內(nèi)容,更多關(guān)于C語言回文串算法驗證的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Qt實現(xiàn)鬧鐘小程序

    Qt實現(xiàn)鬧鐘小程序

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)鬧鐘小程序,利用Qt的designer設(shè)計需要的鬧鐘界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • C++利用VLC庫制作音視頻的示例代碼

    C++利用VLC庫制作音視頻的示例代碼

    這篇文章主要為大家詳細介紹了C++如何利用VLC庫制作音視頻,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2024-01-01
  • C++STL教程之vector模板的使用

    C++STL教程之vector模板的使用

    模板類vector是一個動態(tài)數(shù)組,類似于string類,可存放任意類型,能夠末尾、中間增加數(shù)據(jù),基本上是是new創(chuàng)建動態(tài)數(shù)組的替代品,vector可以自動完成new和delete
    2022-08-08
  • OpenCV實現(xiàn)亂序碎片復(fù)原

    OpenCV實現(xiàn)亂序碎片復(fù)原

    這篇文章主要介紹了通過OpenCV 直方圖相似度對比,實現(xiàn)將4張打亂順序的碎片拼接復(fù)原并展示原圖。文中的示例代碼講解詳細,需要的朋友可以學(xué)習(xí)一下
    2021-12-12
  • 簡單介紹C++中變量的引用

    簡單介紹C++中變量的引用

    這篇文章主要簡單介紹了C++中變量的引用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C語言數(shù)據(jù)結(jié)構(gòu)之堆排序的優(yōu)化算法

    C語言數(shù)據(jù)結(jié)構(gòu)之堆排序的優(yōu)化算法

    堆排序Heap?Sort就是利用堆進行排序的方法,下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)之堆排序的優(yōu)化算法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • OpenCV實現(xiàn)無縫克隆算法的步驟詳解

    OpenCV實現(xiàn)無縫克隆算法的步驟詳解

    借助無縫克隆算法,您可以從一張圖像中復(fù)制一個對象,然后將其粘貼到另一張圖像中,從而形成一個看起來無縫且自然的構(gòu)圖。本文將詳解OpenCV實現(xiàn)無縫克隆算法的步驟,需要的可以參考一下
    2022-06-06
  • 一篇文章帶你了解C++中的顯示轉(zhuǎn)換

    一篇文章帶你了解C++中的顯示轉(zhuǎn)換

    這篇文章主要介紹了C++11顯示類型轉(zhuǎn)換的優(yōu)點,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能給你帶來幫助
    2021-08-08
  • C++ stack與queue模擬實現(xiàn)詳解

    C++ stack與queue模擬實現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于c++stack與queue模擬實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • C++深入探索類和對象之封裝及class與struct的區(qū)別

    C++深入探索類和對象之封裝及class與struct的區(qū)別

    C++?類與對象涉及的知識點非常廣泛,所以我準備寫成幾個特定的部分來作為博文分享,這次的blog將詳細講解類的屬性、行為、訪問權(quán)限,class與struct的區(qū)別以及具體案例,希望能夠?qū)δ銈冇袔椭?,解決入門小白或者對這方面了解不多的朋友們,那么接下來開始今天的內(nèi)容
    2022-05-05

最新評論