題目:
給定一個(gè)二進(jìn)制字符串 S(一個(gè)僅由若干 '0' 和 '1' 構(gòu)成的字符串)和一個(gè)正整數(shù) N匹层,如果對(duì)于從 1 到 N 的每個(gè)整數(shù) X赦拘,其二進(jìn)制表示都是 S 的子串扣溺,就返回 true舱权,否則返回 false挎春。
示例:
輸入:S = "0110", N = 3
輸出:true
解題方法:
題目的意思就是在給定的字符串中能否找到符合條件的子串溉贿,在沒(méi)看題解前枫吧,感覺(jué)這道題是不是用動(dòng)規(guī)啊,看到題解以后宇色,只想說(shuō)我真傻九杂,真的。
簡(jiǎn)單來(lái)說(shuō)就是:
- 將數(shù)字轉(zhuǎn)成二進(jìn)制字符串tmp宣蠕;
- 利用字符串中的find函數(shù)在S中尋找tmp例隆,如果存在就繼續(xù)尋找下一個(gè)數(shù),直到找完所有數(shù)抢蚀;如果不存在镀层,返回false。
代碼和結(jié)果:
class Solution {
public:
void convertToString(int n,string &S)
{
while(n)
{
char b= n&1;
n>>=1;
S.push_back(b+'1'-1);
}
reverse(S.begin(),S.end());
}
bool queryString(string S, int N) {
for(int i=1;i<=N;i++)
{
string tmp;
convertToString(i,tmp);
if(S.find(tmp)==-1)
return false;
}
return true;
}
};
運(yùn)行結(jié)果:原題鏈接:https://leetcode-cn.com/problems/binary-string-with-substrings-representing-1-to-n/