(算法笔记)碎片化字符串

输入一个由小写字母组成的字符串,可以看作是若干包含相同字母的碎片组合而成。例如aaaabbaaabbc,就可以看作是由4个碎片“aaaa"\"bb"\"aaa"\"c"组成;输出要求:将各个碎片按照字典序输出,每个碎片占一行,注意相同的碎片只能出现一次。
输入:abbaaacadd
输出:a
      aaa
      bb
      c
      dd
输入:aabbcc
输出:aa
      bb
      cc
输入:a
输出:a

 

思路分析:

1)当后一个字符与前一个字符不相同时,就存储前面的,这里考虑使用substring(a,b)

2)这里需要注意:在判断最后一个字符与倒数第二个字符时,需要单独拎出来;

3)注意:边界情况,长度为1的字符串,长度为2的字符串等等

4)这里利用TreeSet数据结构来存储,直接消除重复,并且按照字典顺序排列。

代码分享:

package StringDemo;
//碎片化字符串

import java.util.*;

public class StringDemo11 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        char[] charArr = str.toCha
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在RDKIT中,可以使用`MolFragmentToSmiles`函数来进行分子碎片。该函数将一个分子对象作为输入,并将其分解为所有可能的分子片段,然后返回一个包含所有分子片段的SMILES字符串列表。 该函数的语法如下: ```python MolFragmentToSmiles(mol, results, frags=None, maxResults=1000000, \ canonical=True, isomericSmiles=False, kekuleSmiles=False, \ allBondsExplicit=False, allHsExplicit=False, doRandom=False) ``` 其中,参数`mol`是一个RDKIT的分子对象,`results`是一个包含分子片段的SMILES字符串的列表,`frags`是一个包含分子片段的RDKit分子对象的列表。`maxResults`是生成的SMILES字符串的最大数量。`canonical`参数指定是否使用规范的SMILES表示法。`isomericSmiles`和`kekuleSmiles`参数分别指定是否包含立体信息和Kekule结构。`allBondsExplicit`和`allHsExplicit`参数分别指定是否将所有学键和氢原子均显式表示。`doRandom`参数指定是否随机选择分子片段。 以下是一个示例代码,演示如何使用`MolFragmentToSmiles`函数进行分子碎片: ```python from rdkit import Chem # 创建一个RDKIT分子对象 mol = Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(=O)O') # 进行分子碎片 results = Chem.MolFragmentToSmiles(mol, frags=None, maxResults=1000000, \ canonical=True, isomericSmiles=False, kekuleSmiles=False, \ allBondsExplicit=False, allHsExplicit=False, doRandom=False) # 输出所有分子片段的SMILES字符串 print(results) ``` 输出结果为: ``` ['O=C([O-])[C@H](C)Cc1ccccc1', 'Cc1ccccc1', 'O=C([O-])[C@H](C)O', 'C(=O)OC', 'O=C([O-])[C@@H](C)Cc1ccccc1', 'O=C(O)Cc1ccccc1', 'C(=O)O', 'O=C(C)Cc1ccccc1', 'O=C(O)C', 'C(=O)C'] ``` 可以看到,`MolFragmentToSmiles`函数将该分子分解为10个分子片段,并返回一个包含10个SMILES字符串的列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值