• 按字典序排在最后的子串


    给你一个字符串 s,找出它的所有子串并按字典序排列,返回排在最后的那个子串。

    示例 1:

    输入:"abab"
    输出:"bab"
    解释:我们可以找出 7 个子串 ["a", "ab", "aba", "abab", "b", "ba", "bab"]。按字典序排在最后的子串是 "bab"。
    示例 2:

    输入:"leetcode"
    输出:"tcode"
     

    提示:

    1 <= s.length <= 10^5
    s 仅含有小写英文字符。

    1.简单循环出所有的组合,再比较得出最大的一个数据(字典序排列的)

    /**
     * @param {string} s
     * @param {number} numRows
     * @return {string}
     */
    //按照字典序排序
    function comp(max,new_word){
       
        let i_max = 0;
        let i_new_word = 0;
        while(i_max<max.length&&i_new_word<new_word.length){
             if(max.charCodeAt(i_max)<new_word.charCodeAt(i_new_word)){
                return new_word;
            }else if(max.charCodeAt(i_max)>new_word.charCodeAt(i_new_word)){
                return max;
            }else{
                i_max++;
                i_new_word ++;
            }
        }
        //循环结束之后,出现以下情况
        //1.当max的长度小于new_word的长度
        if(i_max>=max.length&&i_new_word>=new_word.length){//当两个元素的完全相同的时候,随便返回一个
            return max;
        }
        if(i_max>=max.length){
            return new_word;
        }
        if(i_new_word>=new_word.length){
            return max;
        }
    }
    var convert = function(s) {
       let temp = [];
       let max = "";
       for(let i=0;i<s.length;i++){
        for(let j=i+1;j<=s.length;j++){
            let demo  =s.substring(i,j);
            if(temp.indexOf(demo)==-1){
                temp.push(demo);//插入数据到temp中
                max = comp(max,demo);
            }
        }
       }
       console.log(max)
       return max;
    };
    console.log(convert("leetcode"))
    超时错误

    2.找出最大的元素的下标,然后切割以最大元素开头的字符串,进行字典排序比较

    /**
     * @param {string} s
     * @return {string}
     */
    
    function compBychar(max_char,new_char){
        if(max_char.charCodeAt()<new_char.charCodeAt()){
            return 1;//当新的字符大于最大值,就返回1
        }else{
            return 0;//等于或小于的时候忽略,主要是为了检索到第一个最大的元素的索引值
        }
    }
    
    var lastSubstring = function(s) {
     let temp = [];
       let max_char = s[0];
       let index = 0;//最大元素的索引值
       let max = "";
       //循环求得第一个字符是字典排序最大的元素
       for(let i=0;i<s.length;i++){
            if(compBychar(max_char,s[i])==1){//直接进行比较就可以了,不用自己写 max_char<s[i]
                max_char  = s[i];
                index = i;
            }
       }
       //查找以最元素开头的字符串所有(即t1xxxxxt2uuuuu,即t1到最后与t2到最后比较)
     for(let i=index;i<s.length;i++){
         if(s[i] == max_char){
            if(max<s.substring(i)){ 
                max = s.substring(i);
            }
         }
      }
       
    
      
       return max;
    };

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/last-substring-in-lexicographical-order
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    config 文件夹中的 dev.env.js
    config 文件夹中的 index.js
    Dialog 对话框 可拖拽
    Pagination 分页 封装
    ElasticSearch学习03--使用Java连接ES
    ElasticSearch学习02--使用Kibana管理ES
    ElasticSearch学习01--基本结构与操作
    redis学习02--使用Jedis调用Redis
    redis学习01--常用命令
    Java基础学习08--JDK1.8特性
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11748914.html
Copyright © 2020-2023  润新知