我正在尝试编写一个代码,该代码获取两个最大长度为1000个大写字符的字符串,然后如果存在多个最大长度的子字符串,则打印它们的最长公共子字符串BUT,输出必须是该子字符串-string按字母顺序排在第一位。 例: 输入:DEFTABC,DEFHABC 输出:ABC 这是我写的代码,但是该代码的问题是,对于上述输入,它给出的是“ DEF”而不是“ ABC”,请帮助我更正我的代码。
#include<stdio.h>
#include<string.h>
int chart[1002][1002];
void commonsubstring(char str1[],char str2[],int m,int n){
int len=0;
int row,col,i,j;
for(i=0;i<=m;i++){
for(j=0;j<=n;j++){
if(i==0 || j==0){
chart[i][j]=0;
}
else if(str1[i-1]==str2[j-1]){
chart[i][j]=chart[i-1][j-1]+1;
if(len<chart[i][j]){
len=chart[i][j];
row=i;
col=j;
}
}
else{
chart[i][j]=0;
}
}
}
if(len==0){
return;
}
char result[1001];
while(chart[row][col]!=0){
result[--len]=str1[row-1];
row--;
col--;
}
puts(result);
}
int main(){
char str1[1001],str2[1001];
gets(str1);
gets(str2);
int m,n;
m=strlen(str1);
n=strlen(str2);
commonsubstring(str1,str2,m,n);
return 0;
}
答案 0 :(得分:0)
使用标准的字符串函数来减少代码的复杂度。如果由于某些原因private void run() throws Exception {
Directory directory = new RAMDirectory();
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(new StandardAnalyzer());
IndexWriter writer = new IndexWriter(directory, indexWriterConfig);
Document doc = new Document();
// Field.Store.NO, Field.Index.ANALYZED, Field.TermVector.YES
FieldType type = new FieldType();
type.setStoreTermVectors(true);
type.setStoreTermVectorPositions(true);
type.setStoreTermVectorOffsets(true);
type.setIndexOptions(IndexOptions.DOCS);
Field fieldStore = new Field("tags", "foo bar and then some", type);
doc.add(fieldStore);
writer.addDocument(doc);
writer.close();
DirectoryReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
Term t = new Term("tags", "bar");
Query q = new TermQuery(t);
TopDocs results = searcher.search(q, 1);
for ( ScoreDoc scoreDoc: results.scoreDocs ) {
Fields termVs = reader.getTermVectors(scoreDoc.doc);
Terms f = termVs.terms("tags");
TermsEnum te = f.iterator();
PostingsEnum docsAndPosEnum = null;
BytesRef bytesRef;
while ( (bytesRef = te.next()) != null ) {
docsAndPosEnum = te.postings(docsAndPosEnum, PostingsEnum.ALL);
// for each term (iterator next) in this field (field)
// iterate over the docs (should only be one)
int nextDoc = docsAndPosEnum.nextDoc();
assert nextDoc != DocIdSetIterator.NO_MORE_DOCS;
final int fr = docsAndPosEnum.freq();
final int p = docsAndPosEnum.nextPosition();
final int o = docsAndPosEnum.startOffset();
System.out.println("p="+ p + ", o=" + o + ", l=" + bytesRef.length + ", f=" + fr + ", s=" + bytesRef.utf8ToString());
}
}
}
,app.post('/sendMails', function(req,res) {
console.log("WENT INTO SEND MAILS!!!")
let transporter = nodemailer.createTransport({
service: 'gmail',
secure: false,
port: 25,
auth: {
user: 'someemail@gmail.com',
pass: process.env.MAIL_PASSWORD
},
tls: {
rejectUnauthorized: false
},
});
let HelperOptions = {
from: '"Babababa" <someemail@gmail.com>',
to: 'someemail@gmail.com',
subject: 'Hello world',
text: 'hey dude'
};
transporter.sendMail(HelperOptions, (error, response) => {
if(error) {
console.log(error);
return res.json({error: "API Error"}); // return should be here instead of at console.log
}
else{
console.log("The message is sent: " + response.message);
return res.json({response: "sent"})
}
})
});
等不可用,则可以创建自己的函数。
您不需要1000个大小为1000的字符串数组。只需获取较短的字符串并找到其所有子字符串即可。如果在较大的字符串中找到了子字符串,则将其作为结果。如果结果已经存在,请确保新匹配项比现有结果长,并且按字母顺序排列。示例:
strcmp