我有一個問題,我必須使用遞歸編寫算法(不能使用循環)。
問題說我的函數應該檢查給定的字符串是否是「平衡」。
該字符串只包含字母(無符號)且僅包含(「[」,「」「))括號。
(例如:「[aa] [abbsa]」)。遞歸函數檢查字符串是否「平衡」
假設每一個「開括號」(「[‘)具有一個閉合一個(’]」),換句話說,該串中的括號是平衡的,而且也沒有必要檢查。
字符串始終是這兩種格式之一:
- 簡單的字符串:特徵。
它只包含沒有括號的字符。 (例如:「aaabbcc」)。
- 與字符串2子串:
該字符串是從第一格式。
該字符串來自第二格式,並且左邊的字符(不包括括號)的數量(讓它稱爲重量)是偶數,右邊的權重也是如此。
該字符串來自第二格式,並且左側的權重也是ODD,右側的權重也是如此。
[LEFT] [RIGHT]
LEFT:它本身就是一個子字符串,它可以實際上處於兩種格式之一S(簡單字符串或與2次字符串字符串)
RIGHT:本身是一個子串,實際上可以是對兩種格式的(簡單的字符串或字符串2子串)
編輯:該字符串是有效的,沒有必要檢查它是否合法。它總是提到的格式和示例之一(可能也更復雜,但它總是合法的)。
編輯:字符串只能是第一種格式或第二種格式。如果它是第二種格式,那麼它包含第一種格式,它必須以「[」開頭並以「]」結尾。
例如:「aaabbbb」(第1格式)。 「[aa] [bbbb]」(第二格式)。 「[[aa] [b]] [[[a] [bbb]] [aaaa]]」(第二格式)。
該字符串是平衡,如果它滿足以下條件中的至少一個:
實例:
字符串 「[ABCDE] [XYZ]」 是平衡的,因爲權重和左重量均爲ODD。 「
字符串」[abcde] [xyzw]「由於右權重是偶數(4是偶數),左權重是奇數(5是奇數),所以不平衡。
字符串「[abcdef] [[x] [yzw]]」是平衡的。
左邊的權重爲6.
子字符串「[x] [yzw]」是平衡的。 (左權重爲1,右權重爲3(均爲ODD))。
的 「[X] [YZW]」 是4。 因此,該權重 「[ABCDEF] [[X] [YZW]]」 是平衡的,因爲這兩個左,右重量的是偶數。
「[ABCDE] [XYZW] [Z]」 是平衡的,即使子串 「[ABCDE] [XYZW]」 不均衡!因爲它的重量是9,並且「[Z]」重1,它們都是ODD。
所以,我必須在C中編寫一個遞歸函數,它接收一個「字符串」。
int verify_weight(char s[])
{
//Code I need here
}
它檢查字符串和其中的子字符串,然後打印每一個,如果他們如果它的平衡或不。
例如: 字符串「[[aa] [b]] [[[x] [yy]] [hhhhh]]」。
它打印此:
不平衡:2,1
不平衡:1,2
平衡:3,5
不平衡:3,8
我還可以創建其他功能,以幫助解決它(僅遞歸)。
編輯:(ANSWER)
謝謝你們了很好的解決方案,這是@科爾馬的解決方案。
代碼:(@科爾馬的答案後,編輯對我的函數名)
#include "stdio.h"
int between_balanced(char s[], int n)
{
if (!s[0] || (s[0] == ']' && n == 1)) return 0;
return 1 + between_balanced(s+1, n + (
s[0] == '[' ? 1 :
s[0] == ']' ? -1 :
0
));
}
int verify_weight(char s[])
{
if (s[0] == '[') {
int left = verify_weight(s+1);
int right = verify_weight(s + between_balanced(s, 0) + 2);
if (left % 2 == right % 2) {
printf("balanced: ");
} else {
printf("imbalanced: ");
}
printf("%d,%d\n", left, right);
return left+right;
} else {
return between_balanced(s, 1);
}
}
int main() {
char s[100];
scanf("%s", s);
printf("%d\n", verify_weight(s));
return 0;
}
對不起,這個長的問題,但我真的需要它的幫助,我花了很多時間試圖解決它,但我不能。感謝您的時間和幫助!
這是怎麼回事呢? – 2015-01-20 18:52:17
這是給我的妹妹,她有一個遞歸考試,她一直在學習幾天。她問了我這個問題,但我解決不了問題,我們花了很多時間來解決這個問題,但我們不能。我想我們在遞歸中缺少一些基本的東西。 – 2015-01-20 18:54:43
你有沒有試圖寫任何東西? – 2015-01-20 19:03:29