zoukankan      html  css  js  c++  java
  • 按字典序排在最后的子串

    给你一个字符串 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
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    vue nextTick使用
    Vue slot插槽内容分发
    vue 项目设置实现通过本地手机访问
    vue router mode模式在webpack 打包上线问题
    html设置 hight100%问题
    更新模块通知栏显看不到当前进度,以及更新下载中可以清理通知问题,华为强制更新退出软件后台下载不显示通知问题
    ScrollView下嵌套GridView或ListView默认不在顶部的解决方法
    文件说明注释
    EditText双光标问题
    原 android重启应用(应用重新启动自身)
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11748914.html
Copyright © 2011-2022 走看看