思路一:
從子串行中挨個找,找到乙個之後,擷取子串行和母序列之前的,然後繼續遞迴自身
1.先分析下找不到的情況,如果母序列從頭找到尾,也沒有找到,則視為不是其子序列
2.繼續分析找到的情況,如果找到之後,並且子串行的長度為1,則代表都找完了。
3.如果這時子串行仍然還沒有找完,則擷取後繼續呼叫自身。
public static booleanissubsequence(string sub,string mstring)
//子串行沒找完,則繼續找;,條件三sub = sub.substring(i+1); mstring = mstring.substring(j+1);returnissubsequence(sub,mstring); } //母序列找到頭了,也沒有找到,條件一
if(j==mstring.length()-1) } }return false;}
思路二:
思路一使用了遞迴和字串擷取,這種方法雖然可行,但是並不是那麼好理解。
我們換一種思路。使用游標
public static booleanissubsequence(string sub,string mstring)for(intj = ptr;jlength();j++ )
//找到了最後一位了,卻沒有break,說明沒有找到
if(j==mstring.length()-1)}}
return true;
}
判斷乙個序列是否是棧的彈出序列
學習過在資料結構的人肯定遇到過很多這種題目 比如給定乙個序列 如 1 2 3 4 5的入棧序列 問 4 5 3 2 1是不是前者的乙個出棧序列首先看 出棧序列 4 5 3 2 1 第乙個元素是4 也就是說入棧時 必須要先找到4 然後出棧在繼續找 5 可以用乙個棧來儲存當前的入棧元素 步驟 操作 棧中...
判斷乙個序列是否是棧的合法序列
棧的合法序列是就是通過一定次序的入棧,出棧後,能夠得到的有順序的一串數,比如說,我們將12345這五個數按照一定的入棧出棧順序進行出入棧,可以得到12345,54321 45321等序列。啦啦啦,重點來啦!我們不如就拿45321來舉例子吧 首先我們把45321這個序列存到乙個棧 s 裡面去,在宣告乙...
判斷乙個序列是否為合法序列
1.1 問題描述 假設以1 和0 分別表示入棧和出棧操作。棧的初態和終態均為空,入棧和出棧的操作序列可表示為僅由1 和0 組成的序列,稱可以操作的序列為合法序列,否則稱為非法序列。寫出乙個演算法,判定所給的操作序列是否合法。若合法,返回1,否則返回0。輸入序列的長度不超過30個操作 1.2 輸入形式...