ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法总结

2022-08-16 22:33:41  阅读:147  来源: 互联网

标签:总结 String strs public 算法 new order 字典


今天放几个关于字符串的算法题

package com.chenghaixiang.jianzhi2.day11;

import java.util.*;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office033 {
}
//给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。
//
//注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map=new HashMap<>();
        for (String str:strs){
            char[] chars=str.toCharArray();
            //排序
            Arrays.sort(chars);
            String key=new String(chars);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());


    }
}
View Code
package com.chenghaixiang.jianzhi2.day11;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office034 {
    public static void main(String[] args) {
        String[] strings;
        strings= new String[]{"hello", "leetcode"};
        Solution01 solution01=new Solution01();
        String order = "hlabcdefgijkmnopqrstuvwxyz";
        solution01.isAlienSorted(strings,order);
    }
}
//某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。
//
//给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。

//题目简单解释就是比较字符串数组中,两两字符串每个位置的字符是否符合字典顺序
class Solution01 {
    public boolean isAlienSorted(String[] words, String order) {
        int[] index=new int[26];
        //将字典添加进数组
        for(int i=0;i<order.length();++i){
            //各个字符所在字符串的位置
            index[order.charAt(i)-'a']=i;
        }
        //遍历字符串数组,从第1个和第2个开始比较
        for(int i=1;i<words.length;i++){
            boolean vaild=false;
            //两个字符串其中一个到结尾就结束遍历
            for(int j=0;j<words[i-1].length()&&j<words[i].length();j++){
                //从比较的字符串中每个位置字符在字典中的位置
                int prev=index[words[i-1].charAt(j)-'a'];
                int cur=index[words[i].charAt(j)-'a'];
                //只要一个满足
                if(prev<cur){
                    vaild=true;
                    break;
                }else if(prev>cur){
                    return false;
                }
            }
            //特殊情况需要处理,设 strs[i] 的长度为 m,strs[i] 的长度小于 strs[i−1] 的长度且 strs[i−1] 的前 m个字符与 strs[i−1]的前 m 个字符相等,
            //此时 strs[i−1]的字典序大于 strs[i] 的字典序。
            if(!vaild){
                if(words[i-1].length()>words[i].length()){
                    return false;
                }
            }
        }
        return true;
    }
}
View Code

 

标签:总结,String,strs,public,算法,new,order,字典
来源: https://www.cnblogs.com/chenghaixiang/p/16593221.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有